设置变量时找不到bash命令

时间:2014-10-03 12:08:35

标签: linux macos bash shell zsh

我正在编写一个shell脚本,我设置的变量很少,其值是命令的输出。

我得到的错误是:

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

现在,我确实阅读了other similar questions并在此基础上尝试了各种各样的事情:

将命令拆分为两个调用

$ $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。

1 个答案:

答案 0 :(得分:5)

您可以使用var=stringvar=$(command)定义变量。

所以你必须删除$前面的=和其他任何标志:

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

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

来自Command substitution

  

对于Bash,第二种形式`COMMAND`或多或少已经过时了,因为它   嵌套有一些麻烦("内部"反引号需要转义)   并逃脱角色。使用$(COMMAND),它也是POSIX!

此外,$()允许您嵌套,这可能很方便。