Bash 脚本解析带引号的参数

Bash 脚本解析带引号的参数

请考虑这个名为测试:

#!/bin/bash
echo $1

以及以下命令和调用:

$ echo "A B"
A B
$ echo ""A B""
A B
$ echo """A B"""
A B
$ echo """A B"""
A B

$ ./test "A B"
A B
$ ./test ""A B""
A
$ ./test """A B"""
A B
$ ./test """"A B""""
A

有人可以解释一下为什么打电话吗测试行为与命令不同回声或指向相关文档?

答案1

因为echo串联起来全部它参数打印它们,并且您的脚本仅限于第一的争论。您应该在脚本中使用"$@"and 。$1

让我们看看您为测试提供的参数:

  • ./test "A B"
    • 一个参数,3 个字符串AspaceB
  • ./test ""A B""
    • 两个论点
      • 首先,empty string连接A
      • 第二,B连接empty string
  • ./test """A B"""
    • 一个参数,empty string与 连接AspaceB与 连接empty string
  • ./test """"A B""""
    • 两个论点
      • 首先,empty string连接与empty string连接A
      • 第二,B连接与empty string连接empty string

echo注意:如果您在参数中使用了多个空格,您会看到不同的结果。这是因为 echo 将其参数与单个空格连接起来:

$ echo "A   B"
A   B
$ echo ""A   B""
A B
$ echo """A   B"""
A   B
$ echo """"A   B""""
A B

相关内容