脚本运行命令正常,但在尝试将输出保存到变量时失败

脚本运行命令正常,但在尝试将输出保存到变量时失败

我有一个包含以下内容的 shell 脚本。我用 来称呼它./script.sh。 Echo 成功运行,但当我尝试将其输出保存到变量时却失败。到目前为止我测试过的所有命令都是如此;lspwdnode, 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。

相关内容