我想编写一个包装器 bash 脚本,并将所有参数传递给一个被调用的程序。我非常确定,这可以正常工作:
#!/bin/sh
someProgam $@
但是当传递异国情调的参数(空的、未转义的、引号中的......)时,这会失败。
例如:没有包装器脚本,someProgram "1 2"3
产生参数
[1 2]
和 [3]
。
但是从脚本调用时,我得到了 [1]
、[2]
、[3]
。
大括号只是为了可视化。
注意:这是一个 Java 程序,被调用。不过我觉得没关系。
最佳答案
#!/bin/sh
someProgram "$@"
另见 bash docs on special parameters .
顺便说一句,"$@"
不是 bash 特有的。您可以依靠跨平台 sh
脚本中的 "$@"
来几乎在任何地方运行。
顺便说一句,如果这恰好是该脚本的最后一行,您可以通过将该行更改为类似的内容来为您的操作系统节省几个字节并在进程表中添加一个条目
exec someProgram "$@"
关于Linux:如何使用脚本委托(delegate)异国情调的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1932964/