我正在编写一个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。
您可以使用var=string或定义变量var=$(command)。
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!
COMMAND
$(COMMAND)
此外,$()还可以嵌套,这可能很方便。