Quand je suis allé répondre cette question , j'allais utiliser le ${}
notation, comme je l'ai vu tant de fois ici, c'est préférable aux backticks.
Cependant, quand j'ai essayé
joulesFinal=${echo $joules2 \* $cpu | bc}
J'ai eu le message
-bash: ${echo $joules * $cpu | bc}: bad substitution
mais
joulesFinal=`echo $joules2 \* $cpu | bc`
fonctionne bien. Quels autres changements dois-je apporter?
``
Est appelé Substitution de commandes et équivaut à $()
(parenthèses), pendant que vous utilisez ${}
(Accolades).
Donc, ceux-ci sont égaux et signifient "interpréter la commande placée à l'intérieur":
joulesFinal=`echo $joules2 \* $cpu | bc`
joulesFinal=$(echo $joules2 \* $cpu | bc)
^ ^
( instead of { ) instead of }
Tandis que les expressions ${}
Sont utilisées pour la substitution de variables.
De man bash
:
La substitution de commande permet à la sortie d'une commande de remplacer le nom de la commande. Il existe deux formes:
$(command) or `command`
De plus, ``
Sont plus difficiles à gérer, vous ne pouvez pas les imbriquer par exemple. Voir les commentaires ci-dessous et aussi Pourquoi $ (...) est-il préféré à ...
(Backticks)? .
Ils se comportent légèrement différemment dans des cas spécifiques:
$ echo "`echo \"test\" `"
test
$ echo "$(echo \"test\" )"
"test"
donc les backticks suppriment silencieusement les guillemets doubles.