J'écris un script shell dans lequel je configure quelques variables, dont la valeur est la sortie des commandes.
Les erreurs que je reçois sont:
$ $tag_name="proddeploy-$(date +"%Y%m%d_%H%M")"
-bash: =proddeploy-20141003_0500: command not found
maintenant, j'ai lu autres questions similaires et sur cette base, j'ai essayé différentes choses:
division de commande en deux appels
$ $deploy_date=date +"%Y%m%d_%H%M"
bash: =date: command not found
$ $tag_name="proddeploy-$deploy_date"
bash: proddeploy- command not found
essayé d'utiliser des backticks
$ $tag_name=`proddeploy-$(date +"%Y%m%d_%H%M")`
bash: proddeploy-20141003_1734: command not found
bash: =: command not found
essayé d'utiliser $()
$ $tag_name=$(proddeploy-$(date +"%Y%m%d_%H%M"))
bash: proddeploy-20141003_1735: command not found
bash: =: command not found
Mais dans tous les cas, la sortie de la commande est exécutée. comment puis-je faire pour arrêter d'exécuter la sortie de commande et juste stocker en tant que variable? J'ai besoin de ça pour travailler sur ZSH et BASH.
Réponses:
5 pour la réponse № 1Vous définissez des variables avec var=string
ou var=$(command)
.
Donc, vous devez supprimer le premier $
et tout autre signe autour =
:
tag_name="proddeploy-$(date +"%Y%m%d_%H%M")"
deploy_date=$(date +"%Y%m%d_%H%M")
^^ ^
La deuxième forme
`COMMAND`
est plus ou moins obsolète pour Bash, car il a des problèmes d'imbrication (les backticks "internes" doivent être évités) et des personnages échappés. Utilisation$(COMMAND)
, c’est aussi POSIX!
Aussi, $()
vous permet de faire un nid, ce qui peut être pratique.