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

おすすめ記事