一尘不染

设置变量时找不到bash命令

linux

我正在编写一个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

尝试使用 $()

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

但是在每种情况下,命令输出都会执行。如何使其停止执行命令输出并仅将其存储为变量?我需要这个来处理ZSH和BASH。


阅读 254

收藏
2020-06-02

共1个答案

一尘不染

您可以使用var=string或定义变量var=$(command)

因此,您必须删除前导$符号和周围的任何其他符号=

tag_name="proddeploy-$(date +"%Y%m%d_%H%M")"

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

命令替换

第二种形式COMMAND对于Bash来说已经过时了,因为它在嵌套(需要转义“内部”反引号)和转义字符方面存在一些麻烦。使用$(COMMAND),它也是POSIX!

此外,$()还可以嵌套,这可能很方便。

2020-06-02