%20y%20echo%20%22%24(cal)%22%20.png)
Estoy usando echo $(cal)
y echo "$(cal)"
en Linux y me da resultados diferentes a los de la imagen. Las comillas dobles no deberían interferir $
en este caso, entonces, ¿qué le da echo "$(cal)"
ese estilo horizontal en comparación con echo $(cal)
?
Este es el resultado:
echo "$(cal)"
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
echo $(cal)
June 2019 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Respuesta1
Hay dos diferencias clave:
El caparazón actúadivisión de palabrassobre lo no cotizado
$(cal)
. Esto significa, suponiendo un valor predeterminado paraIFS
, que todas las cadenas de espacios en blanco (incluidas las nuevas líneas) se reemplazan por un único espacio en blanco. Este es el resultado del comando sin comillas en una sola línea.Aquí hay un ejemplo más simple:
$ s='line 1 > line 2' $ echo "$s" line 1 line 2 $ echo $s line 1 line 2
Como puede ver, en el segundo
echo
, el que no tiene comillas dobles, todas las secuencias de espacios en blanco han sido reemplazadas por espacios en blanco simples. Esto es justo lo que viste cuando usasteecho
sin comillas dobles conecho $(cal)
.El caparazón actúaexpansión del nombre de rutasobre el resultado de la división de palabras. Esto no hace ninguna diferencia en su ejemplo pero, si su resultado incluyó
?
u*
otros personajes activos globalmente, podría generar algunas sorpresas.He aquí un ejemplo sencillo deexpansión del nombre de ruta. Comencemos con un directorio con tres archivos:
$ ls file1 file2 file3
Ahora, definamos una cadena: $ s='file?'
Ahora, veamos que
echo
con comillas dobles devuelve nuestra cadena pero, sin comillas dobles, la cadena se expande en nombres de archivos:$ echo "$s" file? $ echo $s file1 file2 file3