작은따옴표와 큰따옴표를 사용하여 문자열에서 명령을 실행합니다.

작은따옴표와 큰따옴표를 사용하여 문자열에서 명령을 실행합니다.

큰따옴표와 작은따옴표가 필요한 bash 스크립트에서 명령을 실행하고 싶습니다.

내가 실행하려는 명령은 다음과 같습니다.

some_command --query "'val' is not null"

내가 달성하려는 것은 이 명령을 빌드하고 bash 스크립트에서 실행하는 것입니다.

command='some_command --query " 'val' is not null "'
output=$($command)
# + some_command --query '"' val is not null '"'

command='some_command --query \" 'val' is not null \"'
output=$($command)
# + some_command --query '\"' val is not null '\"'

그런데 명령이 따옴표로 묶여 있으므로 실제 명령의 구문이 잘못되었습니다.

문자 코드를 사용하거나 배열로 명령을 작성한 다음 실행하는 등 다양한 방법을 시도했지만 "${array[@]}"소용이 없었습니다.

고쳐 쓰다: bash 버전을 사용하여 실행하고 있습니다.GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

답변1

복잡한 명령을 간단한 변수에 넣으려고 하면 실패할 수밖에 없습니다. 자세히보다명령을 변수에 넣으려고 했지만 복잡한 경우는 항상 실패합니다!.

아마도 당신이 하고 싶은 일은 bash를 통해 가장 잘 달성될 것입니다.기능.

실제로 변수를 사용하려면 bash 배열을 사용하십시오.

command=(some_command --query " 'val' is not null ")
"${command[@]}"

command다음을 사용하여 배열의 실제 값을 볼 수 있습니다 declare.

$ declare -p command
declare -a command=([0]="some_command" [1]="--query" [2]=" 'val' is not null ")

우리는 이것이 주변의 작은 따옴표를 보존한다는 것을 볼 수 있습니다 val.

$ command=(echo -E " 'val' is not null ")
$ "${command[@]}"
 'val' is not null 

관련 정보