参数分割

参数分割

我有一个 bash 脚本,它是另一个进程的简单包装:

$ cat ~/bin/s3cmd
#!/bin/sh
trickle -u 80 ~/bin/s3cmd.py $*
$

当参数不包含空格时,这非常有用。然而,每当传递给外部脚本的参数s3cmd包含空格时,即使这些参数在命令行上被转义,它似乎也会失败。

我如何对此进行空格证明,以便每个单个参数都正确传递到s3cmd.py

答案1

使用"$@"

#!/bin/sh
trickle -u 80 ~/bin/s3cmd.py "$@"

当进行隐式分词时(几乎总是在不加引号时),$*和is之间没有功能差异。$@然而,当引用时,$*是一个由 的第一个字符分隔的单个字符串IFS,并且"$@"是一个真正的数组(您想要的)。

$ set foo bar baz
$ IFS=c
$ printf '%s\n' "$@"
foo
bar
baz
$ printf '%s\n' "$*"
foocbarcbaz

答案2

您需要使用 $@ 而不是 $* 并引用它:

trickle -u 80 ~/bin/s3cmd.py "$@"

另请参阅Special Parametersbash 联机帮助页中的部分。

相关内容