【发布时间】:2012-04-16 11:25:30
【问题描述】:
假设我有一个要运行的命令 (cmd) 和一个包含我要传递给函数的参数的变量(类似于 --foo 'bar baz' qux)。像这样:
#!/bin/sh
command=cmd
args="--foo 'bar baz' qux"
参数包含引号,如上所示,将包含空格的参数组合在一起。然后我想运行命令:
$command $args
当然,这会导致运行带有 四个 参数的命令:--foo、'bar、baz' 和 qux。我习惯的替代方案(即使用"$@" 时)提出了一个不同的问题:
$command "$args"
这将执行带有 one 参数的命令:--foo 'bar baz' qux。
如何按预期运行带有 三个 参数(--foo、bar baz 和 qux)的命令?
【问题讨论】:
-
学究式一点:现代
/bin/sh是 POSIX sh,而不是 Bourne。 (...不,POSIX sh 不是 1970 年代 Bourne 的纯超集:例如,在 Bourne 中——但不是 POSIX sh 或现代派生词,如 ash、dash、ksh 或 bash --^是一个有效的竖线字符)。 -
我看到了你的迂腐,让你又多了一点迂腐:Solaris 10 是“现代的”(在 21 世纪问世,仍在生产中使用,但幸运的是现在正在减少),然而它的
/bin/sh绝对不符合 POSIX。
标签: shell escaping arguments quotes sh