Bash:如何逃避$ @?

时间:2010-12-31 09:07:52

标签: bash escaping command-line-arguments

我需要编写一个bash脚本,除其他外,应该将其所有参数原封不动地传递给另一个程序。

最小例子:

$ cat >proxy.sh 
#!/bin/bash

./script.sh $@
^D

$ chmod +x proxy.sh 

$ cat >script.sh 
#!/bin/bash

echo one $1
echo two $2
echo three $3 
^D

$ chmod +x script.sh 

这种天真的方法不适用于带空格的参数:

$ ./proxy.sh "a b" c
one a
two b
three c

预期:

$ ./proxy.sh "a b" c
one a b
two c
three

我应该在proxy.sh写一下这个怎么发生?

请注意,我不能使用别名,proxy.sh必须是一个脚本 - 它在调用script.sh之前会执行一些操作。

1 个答案:

答案 0 :(得分:11)

引用$@,将其设为"$@"

$ cat >proxy.sh 
#!/bin/bash

./script.sh "$@"
^D

然后它保留原始引号:

one a b
two c
three