ZSH: 다음 명령(변수 할당)을 이스케이프하는 방법은 무엇입니까?

ZSH: 다음 명령(변수 할당)을 이스케이프하는 방법은 무엇입니까?
_test=`shasum -a 256 my "file here.txt" | awk -F' ' '{print $1}'`

이것은 예상대로 작동합니다. 하지만 내 안의 OCD는 다음과 같은 것을 사용하고 싶어합니다.

_test="${my-command-here}"

하지만 awk 부분의 작은따옴표로 인해 심각한 대체 오류가 발생합니다.

$ _test="${shasum -a 256 "my file here.txt" | awk -F' ' '{print $1}'}"
zsh: bad substitution
$ _test=${shasum -a 256 \"my file here.txt\" | awk -F\' \' \'{print $1}\'}
zsh: bad substitution

작동시키는 방법에 대한 아이디어가 있습니까? 감사해요

답변1

당신이 하고 있는 일을 ${...}이라고 합니다.매개변수 확장. 이렇게 하면 매개변수가 확장됩니다. 귀하의 경우 이름이 매개변수이지만 shasum -a 256 "my file here.txt" | awk -F' ' '{print $1}'이는 에 설명된 대로 유효한 매개변수 이름이 아닙니다.매개변수:

이름은 영숫자와 밑줄의 순서이거나 단일 문자 "*", "@", "#", "?", "-", "$" 또는 "!"일 수 있습니다.

${...}당신이 정말로 원하는 것은 필요한 모든 것을 실행하는 것입니다명령 대체, 중괄호 대신 괄호를 사용합니다.

↪ touch "my file here.txt"
↪ _test="$(shasum -a 256 "my file here.txt" | awk -F' ' '{print $1}')"
↪ echo $_test
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

관련 정보