在 bash 中连接字符串,同时添加双引号

在 bash 中连接字符串,同时添加双引号

我有以下 bash 脚本:

set -ex
X="bash -c"
Y="ls -al"

我想执行(注意双引号):

bash -c "ls -al"

以下不起作用:

C=$X\ $Y
$C

这给出了输出

+ X='bash -c'
+ Y='ls -al'
+ C='bash -c ls -al'
+ bash -c ls -al

ls -al 周围没有双引号

我试过这个:

C=$X\ \"$Y\"

但这不起作用:

+ X='bash -c'
+ Y='ls -al'
+ C='bash -c "ls -al"'
+ bash -c '"ls' '-al"'

如何正确连接 Y 到 X,同时在 Y 周围保留双引号?

答案1

您可以使用数组变量C

X="bash -c"
Y="ls -al"
C=($X "$Y")
"${C[@]}"

请注意,$X没有引号,因为我们只有一个命令和一个参数。

或者简短的版本:

C=(bash -c "ls -al")
"${C[@]}"

答案2

这两种方法都可以,而且我确信还有更多方法。

X="bash -c"
Y="ls -al"

Z="$X \"$Y\""
echo $Z

Z=$(printf '%s "%s"' "$X" "$Y")
echo $Z

相关内容