我有以下 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