在 bash 参数中保留转义 $@



与此相关:在 bash 参数中保留引号

一个简单的例子,我只是用nohup运行一个命令......

#!/bin/bash
nohup "$@"
...
./myscript gedit some file with spaces.txt

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

#!/bin/bash
CMD="$@"
printf "%qn" "$CMD" #for debugging
nohup $CMD

我已经尝试了一些排列,但在所有情况下都不起作用。我错过了什么?理想情况下,我希望能够在nohup之前修改$CMD.

你需要使用数组。

cmd=( "$@" )
printf '%qn' "${cmd[@]}"
nohup "${cmd[@]}"

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

另请参阅数组上的 BashSheet 条目、BashFAQ #5(解释如何使用数组)和 BashFAQ #50(解释这样做导致的陷阱)。

相关内容

  • 没有找到相关文章

最新更新