【发布时间】:2016-08-14 06:59:22
【问题描述】:
"$@" 似乎让, 消失了。例如
param="123 1,2"
set echo $param
"$@"
这将回显“123 1 2”而不是“123 1,2”,但在某些情况下,, 需要作为命令的值。
而且这个好像和bash版本有关,用bash 4.1.2,结果是正确的,但是用4.2.46,逗号不见了。
编辑:
简而言之,可能是 nice 的责任:
我做了unset IFS 并且在终端中我给出的测试用例工作正常,但我的脚本却没有。
我实际上正在编写一个初始化脚本,我检查了/etc/init.d/functions 中的action() 函数,并添加了一些调试代码:
echo "$@" # added by me
unset IFS # added by me
"$@" && success $"$STRING" || failure $"$STRING"
回显的命令是正确的(nice -n -10 ovs-vswitchd ... --socket-mem 1024,1024),但在ps 结果中,nice 执行的实际命令变为ovs-vswitchd ... --socket-mem 1024 1024。
我开始认为这可能是 nice 的错。
【问题讨论】:
-
检查 IFS 的中断。
-
这似乎是 bash 4.1 中的一个错误。我正在检查changelog for bash 4.2 看看是否有相关内容。
-
set -- "$param"应该可以解决您的问题 -
你的测试用例工作正常;你能提供一个minimal reproducible example 来演示
nice的行为吗? -
echo "$@"实际上并不能有效地代表真正正在运行的内容——您无法区分echo "foo bar"和echo foo bar。相反,printf '%q ' "$@"; printf '\n'