tol*_*ira 8 shell-script quoting
请考虑这个名为test 的简单脚本:
#!/bin/bash
echo $1
Run Code Online (Sandbox Code Playgroud)
以及以下命令和调用:
$ 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
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么测试调用的行为不像命令echo或指向相关文档吗?
gle*_*man 13
因为echo
连接所有它的参数来打印它们,并且您的脚本仅限于第一个参数。你应该在你的脚本中使用"$@"
and $1
。
让我们看看您为测试提供的参数:
./test "A B"
./test ""A B""
./test """A B"""
./test """"A B""""
注意:echo
如果您在参数中使用多个空格,您会看到不同的结果。那是因为 echo 将其参数与一个空格连接起来:
$ echo "A B"
A B
$ echo ""A B""
A B
$ echo """A B"""
A B
$ echo """"A B""""
A B
Run Code Online (Sandbox Code Playgroud)