A continuación, se muestran una serie de casos en los que se echo $var
puede mostrar un valor diferente al que se acaba de asignar. Esto sucede independientemente de si el valor asignado fue "entre comillas dobles", "entre comillas simples" o no.
¿Cómo consigo que el shell establezca mi variable correctamente?
Asteriscos
La salida esperada es /* Foobar is free software */
, pero en su lugar obtengo una lista de nombres de archivo:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Corchetes
El valor esperado es [a-z]
, ¡pero a veces obtengo una sola letra!
$ var=[a-z]
$ echo $var
c
Saltos de línea (nuevas líneas)
El valor esperado es una lista de líneas separadas, ¡pero en cambio todos los valores están en una línea!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Múltiples espacios
Esperaba un encabezado de tabla cuidadosamente alineado, pero en su lugar, varios espacios desaparecen o se contraen en uno.
$ var=" title | count"
$ echo $var
title | count
Pestañas
Esperaba dos valores separados por tabulaciones, ¡pero en su lugar obtengo dos valores separados por espacios!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
está bien, peroecho "$var"
es necesario.