다음을 포함하는 쉘 스크립트가 있습니다. 나는 그것을 부르곤 했다 ./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에도 적용됩니다.