逃避“$ @”扩展中的逗号

时间:2016-04-21 08:03:50

标签: bash shell

"$@"似乎让,消失了。 e.g。

param="123 1,2"
set echo $param
"$@"

这将回显“123 1 2”而不是“123 1,2”,但在某些情况下需要,作为命令的值。

这似乎与bash版本有关,使用bash 4.1.2,结果是正确的,但是在4.2.46中,逗号丢失了。

编辑:

简而言之,也许应该归咎于nice

我做了unset IFS并且在终端中我给出了正确的测试用例,但没有使用我的脚本。

我实际上正在处理init脚本,我检查了action()中的/etc/init.d/functions函数,并添加了一些调试代码:

echo "$@" # added by me
unset IFS # added by me
"$@" && success $"$STRING" || failure $"$STRING"

echoed命令是正确的(nice -n -10 ovs-vswitchd ... --socket-mem 1024,1024),但在ps结果中,nice执行的实际命令变为ovs-vswitchd ... --socket-mem 1024 1024

我开始认为可能是nice的责任。

1 个答案:

答案 0 :(得分:0)

请在拆分参数之前(在命令set之前)直接在脚本中设置IFS。例如,做这样的事情:

oldIFS=$IFS
param="123 1,2"
IFS=" "  # put tabs and or newline if also wanted.
set echo $param
IFS=$oldIFS
"$@"

无论您之前的IFS是什么,这都会有效。