假设我有一个要运行的命令(cmd
)和一个包含我想传递给该函数的参数的变量(如--foo 'bar baz' qux
)。像这样:将shell转义的参数字符串传递给Bourne shell中的子命令
#!/bin/sh
command=cmd
args="--foo 'bar baz' qux"
参数包含引号,就像上面显示的那样,它们将包含空格的参数组合在一起。那么我想运行命令:
$command $args
这,当然,结果与参数运行命令:--foo
,'bar
,baz'
和qux
。我习惯替代(即,使用"[email protected]"
时)呈现出不同的问题:
$command "$args"
此执行与一个参数的命令:--foo 'bar baz' qux
。
如何运行与参数(--foo
,bar baz
,并且qux
)命令如预期?
快速的职业生涯:现代'/ bin/sh'是POSIX sh,而不是Bourne。 (...并且不是,POSIX sh是**不是** 70年代Bourne的纯粹超集:例如,在Bourne中 - 但不是POSIX sh或现代衍生物,如灰,短跑,ksh或bash - ^'是一个有效的管道字符)。 – 2015-11-05 15:52:54
我看到你的脚步,为你提供了另一点儿琐事:Solaris 10是“现代”(出现在21世纪,仍然在生产中使用,尽管幸运的是现在正在减少),然而它的'/ bin/sh'绝对不符合POSIX标准。 – mtraceur 2016-09-06 07:17:47