当设置变量时出现“bash命令未找到”的错误提示

3
我正在编写一个 shell 脚本,在其中设置了一些变量,它们的值是命令的输出。
我遇到的错误如下:
$  $tag_name="proddeploy-$(date +"%Y%m%d_%H%M")"
-bash: =proddeploy-20141003_0500: command not found

现在,我已经阅读了其他类似的问题,并根据此尝试了各种方法:

将命令拆分为两个调用

$ $deploy_date=date +"%Y%m%d_%H%M"
bash: =date: command not found
$ $tag_name="proddeploy-$deploy_date"
bash: proddeploy- command not found

尝试使用反引号

$ $tag_name=`proddeploy-$(date +"%Y%m%d_%H%M")`
bash: proddeploy-20141003_1734: command not found
bash: =: command not found

tried using $()

$ $tag_name=$(proddeploy-$(date +"%Y%m%d_%H%M"))
bash: proddeploy-20141003_1735: command not found
bash: =: command not found

但是在每种情况下,命令输出都被执行。我该如何让它停止执行命令输出并只存储为变量?我需要在ZSH和BASH上使用此功能。

2个回答

8
你可以使用var=字符串var=$(命令)来定义变量。
因此,你需要去掉前面的$和周围任何其他符号,只留下=
tag_name="proddeploy-$(date +"%Y%m%d_%H%M")"

deploy_date=$(date +"%Y%m%d_%H%M")
            ^^                   ^

来自命令替换

第二种形式的`COMMAND`在Bash中已经过时,因为它在嵌套方面存在一些问题(需要转义“内部”反引号和转义字符)。使用$(COMMAND),它也是POSIX标准!

$()还允许你进行嵌套,这可能会很方便。


2
被接受的答案展示了已修正的代码,但未明确指出您的问题之一是在赋值时访问变量(使用 $),这是不合法的。 例如:
$foo=4

应该是

foo=4

看到区别了吗?foo正在被赋值,因此您不应该使用$foo,$foo并不是foo而是foo的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接