스크립트는 명령을 정상적으로 실행하지만 출력을 변수에 저장하려고 할 때 실패합니다.

스크립트는 명령을 정상적으로 실행하지만 출력을 변수에 저장하려고 할 때 실패합니다.

다음을 포함하는 쉘 스크립트가 있습니다. 나는 그것을 부르곤 했다 ./script.sh. Echo는 성공적으로 실행되지만 출력을 변수에 저장하려고 하면 실패합니다. 이는 지금 ls까지 테스트한 모든 명령에 해당 됩니다 pwd.node

#!/bin/zsh

echo foo
# foo

output=$("echo foo")
# command not found: echo foo

어떻게요?

편집하다:수정: 마지막 에코가 문자열 내부에 있었습니다!

답변1

문제를 찾으신 것 같습니다. echo전체 명령 자체가 아닌 에 전달된 문자열만 인용해야 합니다 .

output=$("echo foo")

다음과 같이 변경되어야 합니다:

output=$(echo "foo")

output변수에 리터럴 문자열이 포함되도록 하려면 echo foo다음과 같이 설정해야 합니다.

output='echo foo'

하지만 이렇게 하는 것도 가능합니다:

output=$(echo 'echo foo')

답변2

예상할 수 있듯이 대괄호 안의 명령은 하위 쉘을 생성합니다. 그러나 $()는 당신이 생각하는 것과 다릅니다. 명령 출력을 문자열로 반환하지 않지만 명령 출력을 셸로 바꿉니다. 증거를 원하면 다음을 시도하십시오.$(echo "echo 123")

대신, 쉘에서 실행할 때 배열이 아닌 큰따옴표를 사용하여 문자열로 캡처하려고 합니다(출력은 공백으로 구분됩니다).

output="$(echo foo)"

이는 zsh에만 국한된 문제가 아니며 bash에도 적용됩니다.

관련 정보