Estoy escribiendo un script de shell donde estoy configurando pocas variables, cuyo valor es la salida de los comandos.
Los errores que recibo son:
$ $tag_name="proddeploy-$(date +"%Y%m%d_%H%M")"
-bash: =proddeploy-20141003_0500: command not found
ahora leí otras preguntas similares Y basándome en ello, probé varias cosas:
dividiendo el comando en dos llamadas
$ $deploy_date=date +"%Y%m%d_%H%M"
bash: =date: command not found
$ $tag_name="proddeploy-$deploy_date"
bash: proddeploy- command not found
intentado usar backticks
$ $tag_name=`proddeploy-$(date +"%Y%m%d_%H%M")`
bash: proddeploy-20141003_1734: command not found
bash: =: command not found
intentado usar $()
$ $tag_name=$(proddeploy-$(date +"%Y%m%d_%H%M"))
bash: proddeploy-20141003_1735: command not found
bash: =: command not found
Pero en todos los casos se ejecuta el comando de salida. ¿Cómo hago para que deje de ejecutar la salida del comando y solo almacene como una variable? Necesito esto para trabajar en ZSH y BASH.
Respuestas
5 para la respuesta № 1Se definen variables con var=string
o var=$(command)
.
Así que tienes que quitar el lider $
y cualquier otra señal alrededor =
:
tag_name="proddeploy-$(date +"%Y%m%d_%H%M")"
deploy_date=$(date +"%Y%m%d_%H%M")
^^ ^
La segunda forma
`COMMAND`
Es más o menos obsoleto para Bash, ya que tiene algunos problemas con el anidamiento (es necesario escapar los backtick "internos") y los personajes que escapan. Utilizar$(COMMAND)
, también es POSIX!
También, $()
Te permite anidar, lo que puede ser útil.