큰따옴표와 작은따옴표가 필요한 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