![큰 따옴표를 추가하면서 bash에서 문자열을 연결합니다.](https://linux55.com/image/156222/%ED%81%B0%20%EB%94%B0%EC%98%B4%ED%91%9C%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EB%A9%B4%EC%84%9C%20bash%EC%97%90%EC%84%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%97%B0%EA%B2%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음 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