次の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の周りに二重引用符を保持しながら、YをXに正しく接続する方法は?
答え1
配列変数を使用できますC
。
X="bash -c"
Y="ls -al"
C=($X "$Y")
"${C[@]}"
$X
1つのコマンドと1つのパラメータしかないため、引用符はありません。
または短いバージョン:
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