Ich suchte nach einer Möglichkeit, Hexadezimalzahlen über die Befehlszeile zu konvertieren, und fand heraus, dass es eine sehr einfache Methode gibt echo $((0x63))
.
Es funktioniert großartig, aber ich bin ein wenig verwirrt darüber, was hier passiert.
Ich weiß, $(...)
ist normalerweise eine Unterschale, in der der Inhalt vor dem äußeren Befehl ausgewertet wird.
Ist es in dieser Situation immer noch eine Unterschale? Ich denke nicht, dass dies bedeuten würde, dass die Sub-Shell nur auswertet, (0x63)
was kein Befehl ist.
Kann jemand den Befehl für mich auflösen?
$((...))
Konflikten mit der Befehlsersetzung daran erinnern müssen,echo "$( (echo x; echo y) | tr xy yx)"
statt zu schreibenecho "$((echo x; echo y) | tr xy yx)"
(auch wenn einige Shells das letztere weiterhin akzeptieren, YMMV).$(( ))
eine Ausgabe produzieren, die von Worttrennung oder Globbing betroffen ist?IFS=9; echo $((0x63))
. Siehe auch Auswirkungen auf die Sicherheit, wenn Sie vergessen, eine Variable in bash / POSIX-ShellsWhat about [ $# -gt 1 ]
Dies ist keine Unterschale, sondern eine arithmetische Auswertung. Von
man bash
:quelle
((...))
ist nicht ganz das gleiche wie$((...))
. Beide führen eine arithmetische Auswertung durch, wobei letztere durch den resultierenden Wert als Zeichenfolge ersetzt wird.