在bash参数中保留转义$ @

时间:2014-02-17 03:33:20

标签: bash escaping

与此相关:Preserve Quotes in bash arguments

一个简单的例子,我只使用nohup ...

运行命令
#!/bin/bash
nohup "$@"

...

./myscript gedit some\ file\ with\ spaces.txt

这很好用。但是,我不知道在使用中间变量时如何保持参数的正确位转义...

#!/bin/bash
CMD="$@"
printf "%q\n" "$CMD" #for debugging
nohup $CMD

我尝试了一些排列,并且在所有情况下都没有效果。我错过了什么?理想情况下,我希望能够在$CMD之前修改nohup

1 个答案:

答案 0 :(得分:6)

您需要使用数组。

cmd=( "$@" )
printf '%q\n' "${cmd[@]}"
nohup "${cmd[@]}"

标量变量(字符串)是NUL分隔的,因此它们不能包含参数列表(就其本质而言,它是NUL分隔的)。

另请参阅the BashSheet entry on arraysBashFAQ #5(解释如何使用数组)和BashFAQ #50(解释这样做的陷阱)。