
다음 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
하나의 명령과 하나의 매개변수만 있으므로 따옴표가 없습니다 .
또는 짧은 버전:
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