_test=`shasum -a 256 my "file here.txt" | awk -F' ' '{print $1}'`
这按预期工作。但我内心的强迫症想要使用类似的东西
_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