我基本上想做bash -c "$@"
,但这不起作用(我的命令无法运行)。 eval "$@"
工作正常,有什么区别?
我想做这样的事情:
myscript:
function run_it() {
bash -c "$@"
}
run_it $@
./myscript MY_VAR=5 make my-target
答案 0 :(得分:0)
这是因为报价。这样应该可以更好地工作:
function run_it() {
bash -c "$*" # Change 1
}
run_it "$@" # Change 2
更改原因1:$@
在引号内使用时很特殊,例如"$@"
。它没有扩展为单个参数,而是扩展为一系列带引号的参数:"MY_VAR=5" "make" "my-target"
。结果,-c
标志仅接收MY_VAR=5
部分,该部分分别以make
和my-target
作为参数$0
和$1
执行。通过使用"$*"
,您 do 最终得到一个字符串。注意,这仍然不能正确处理空格。不知道如何解决这个问题。
更改原因2:在这里,我们要做希望每个参数都单独引用。这样可以确保不会很快分裂参数。除非先解决其他空格问题,否则可能没有意义。