¿Por qué se muestra 1 4 5 6 para las últimas cuatro declaraciones de eco? Golpeé esto por accidente una vez, pero ahora tengo curiosidad por saber por qué ocurre este comportamiento.
Estas declaraciones funcionan como se esperaba (para mí).
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Estas declaraciones de eco muestran constantemente 1 4 5 6. ¿Hay algo especial en estos números?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
¡Gracias!
- El posible duplicado está relacionado y es útil, pero no es un duplicado. El posible duplicado es desde la perspectiva de un
rm
comando. Esta pregunta es desde la perspectiva de un "comportamiento extraño" percibido de unecho
comando. La respuesta subyacente para ambos es global. Alguien que busca problemas con unecho
comando no encontraría fácilmente larm
pregunta, pero probablemente aterrizaría aquí.
1
4
5
y6
nullglob
, su segundo ejemplo (echo [237890]
) en realidad no imprimirá nada, lo que podría haber sido una pista de que estaba viendo expansión global en los otros ejemplos.Respuestas:
El corchete abierto
[
es un carácter especial para el caparazón; abre un algoritmo de coincidencia de patrones que dice "coincide con cualquiera de los caracteres dentro de los corchetes". Debido a que tiene 4 archivos nombrados como: 1, 4, 5 y 6 en su directorio actual, cuando los caracteres dentro de los corchetes contienen cualquiera de esos dígitos, su shell reemplaza la coincidencia de patrones con esos nombres de archivo. Cuando se utiliza en lugarecho [ 9876543210 ]
que está llamando eco con 3 parámetros:[
,9876543210
, y]
.Debe citar los parámetros de su declaración de eco para evitar que el shell lo vea como una solicitud de coincidencia de patrón.
(o elimine los archivos denominados 1, 4, 5 y 6, pero esa es una solución alternativa para demostrar el comportamiento, no una solución).
fuente
echo [ 987 ]
llamadasecho
con tres parámetros que mencionartest
?echo
se interpreta de manera diferentebash
dependiendo de si hay espacios entre los corchetes y qué hay dentro de ellos.[123]
vs[ 123 ]
.