큰 따옴표를 추가하면서 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 주위에 큰따옴표를 유지하면서 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

관련 정보