"$@" 似乎使 , 消失。例如

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"

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

我开始想也许应该怪 nice

最佳答案

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

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

无论您之前的 IFS 是什么,这都将起作用。

关于bash - 在 "$@"扩展中转义逗号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36763442/

10-13 08:51