Estaba buscando una forma de convertir hexadecimal a través de la línea de comandos y descubrí que hay un método muy fácil echo $((0x63))
.
Funciona muy bien, pero estoy un poco confundido sobre lo que está sucediendo aquí.
Sé $(...)
que normalmente es un sub-shell, donde los contenidos se evalúan antes del comando externo.
¿Sigue siendo un sub-shell en esta situación? No estoy pensando, ya que eso significaría que el subconjunto solo está evaluando (0x63)
cuál no es un comando.
¿Alguien puede romper el comando por mí?
$((...))
conflictos con la sustitución de comandos, uno debe recordar escribir enecho "$( (echo x; echo y) | tr xy yx)"
lugar deecho "$((echo x; echo y) | tr xy yx)"
(a pesar de que algunos shells aún aceptarán el último, YMMV).$(( ))
producción se vea afectada por la división de palabras o el pegoteo?IFS=9; echo $((0x63))
. Consulte también Implicaciones de seguridad de olvidarse de citar una variable en bash / POSIX shells (What about [ $# -gt 1 ]
sección)Esto no es una subshell, sino una evaluación aritmética. De
man bash
:fuente
((...))
no es exactamente lo mismo que$((...))
. Ambos realizan evaluaciones aritméticas, pero el último se reemplaza por el valor resultante como una cadena.