我有一个包含以下内容的 shell 脚本。我用 来称呼它./script.sh
。 Echo 成功运行,但当我尝试将其输出保存到变量时却失败。到目前为止我测试过的所有命令都是如此;ls
,pwd
,node
, ETC…
#!/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
正如人们所期望的那样,括号内的命令会创建一个子 shell。但 $() 并不是你想象的那样。它不会将命令的输出作为字符串返回,而是将命令的输出替换到 shell 中。如果你想要证据试试这个:$(echo "echo 123")
相反,您希望使用双引号将其捕获到字符串中,而不是在 shell 上运行的数组(输出由空格分隔)。
output="$(echo foo)"
请注意,这不是 zsh 特有的问题,它也适用于 bash。