Je cherchais un moyen de convertir hexadécimal via la ligne de commande et j'ai trouvé qu'il y avait une méthode très simple echo $((0x63))
.
Cela fonctionne très bien, mais je suis un peu confus quant à ce qui se passe ici.
je sais $(...)
c'est normalement un sous-shell, où le contenu est évalué avant la commande externe.
Est-ce toujours un sous-shell dans cette situation? Je ne pense pas que cela signifierait que le sous-shell évalue simplement (0x63)
ce qui n'est pas une commande.
Quelqu'un peut-il décomposer la commande pour moi?
$((...))
conflits avec la substitution de commandes, il faut se rappeler d'écrire à laecho "$( (echo x; echo y) | tr xy yx)"
place deecho "$((echo x; echo y) | tr xy yx)"
(même si certains shells accepteront toujours cette dernière, YMMV).$(( ))
produire une sortie qui est affectée par le fractionnement ou la globalisation des mots?IFS=9; echo $((0x63))
. Voir aussi Conséquences pour la sécurité d'oublier de citer une variable dans des shells bash / POSIX (What about [ $# -gt 1 ]
section)Ce n'est pas une sous-coquille, mais une évaluation arithmétique. De
man bash
:la source
((...))
n'est pas tout à fait la même chose que$((...))
. Les deux font une évaluation arithmétique, mais cette dernière est remplacée par la valeur résultante sous forme de chaîne.