Saya sedang mencari cara untuk mengkonversi heksadesimal melalui baris perintah dan menemukan ada metode yang sangat mudah echo $((0x63))
.
Ini bekerja dengan baik tetapi saya agak bingung dengan apa yang terjadi di sini.
Saya tahu $(...)
biasanya sub-shell, di mana isinya dievaluasi sebelum perintah luar.
Apakah ini masih menjadi sub-shell dalam situasi ini? Saya berpikir tidak karena itu berarti sub-shell hanya mengevaluasi (0x63)
yang bukan perintah.
Bisakah seseorang meruntuhkan perintah untuk saya?
$((...))
konflik dengan substitusi perintah, kita harus ingat untuk menulisecho "$( (echo x; echo y) | tr xy yx)"
alih-alihecho "$((echo x; echo y) | tr xy yx)"
(walaupun beberapa shell masih akan menerima yang terakhir, YMMV).$(( ))
output yang dipengaruhi oleh pemisahan kata atau globbing?IFS=9; echo $((0x63))
,. Lihat juga Implikasi keamanan dari lupa mengutip variabel dalam bash / POSIX shells (What about [ $# -gt 1 ]
bagian)Ini bukan subkulit, tetapi evaluasi aritmatika. Dari
man bash
:sumber
((...))
tidak persis sama dengan$((...))
. Keduanya melakukan evaluasi aritmatika, tetapi yang terakhir digantikan oleh nilai yang dihasilkan sebagai string.