假设我有一个可执行文件坐标它采用可变数量的命令行参数和一个包装器 Korn shell 脚本xyz.ksh。有没有一种简单的方法可以将所有 shell 脚本参数原样传递给可执行文件?
答案1
您需要使用:
"$@"
在所有情况下都正确扩展参数。此行为在 bash 和 ksh 中相同。
大多数情况下,$* 或 $@ 会给出您想要的结果。但是,它们会用空格来扩展参数。“$*”将所有参数缩减为一个。“$@”给出实际传递给包装器脚本的内容。
亲自查看(再次,在 bash 或 ksh 下):
[tla ~]$ touch file1 file2 space\ file
[tla ~]$ ( test() { ls $*; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1 file2
[tla ~]$ ( test() { ls $@; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1 file2
[tla ~]$ ( test() { ls "$*"; }; test file1 file2 space\ file )
ls: cannot access file1 file2 space file: No such file or directory
[tla ~]$ ( test() { ls "$@"; }; test file1 file2 space\ file )
file1 file2 space file
答案2
我认为您正在寻找 $* 变量: http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html#commandlineargs
我认为它在 bash 中被称为 $@。
答案3
是的。使用 $* 变量。尝试以下脚本:
#!/bin/ksh
echo $*
然后使用以下命令调用脚本:
scriptname a b c foobar
你的输出将是:
a b c foobar