正确转义命令替换的输出以用作另一个命令的参数

正确转义命令替换的输出以用作另一个命令的参数

COMMANDbash 中是否有一种方法可以正确使用命令替换(` ` 或)的输出$(COMMAND)作为另一个程序的参数?

例子:

% touch -- safe-name -name-with-dash-prefix "name with space" \
    'name-with-double-quote"' "name-with-single-quote'" \
    'name-with-backslash\'

这都不是:

% ls -l `ls`
% ls -l $(ls)

也不是这个:

% ls -l "`ls`"
% ls -l "$(ls)"

对于所有示例名称,可以正确地将命令替换的输出作为参数重新提供。如果没有双引号,带引号的名称可以,但带空格的名称不行。使用双引号时,名称中带有空格是可以的,但多个名称会连接在一起。

注意:请将讨论限制在命令替换(即没有管道、mapfile 或 xargs)。

相关内容