Me han dicho que los espacios son importantes en bash
otros scripts de shell y que no debería cambiar la existencia de espacios a menos que sepa lo que estoy haciendo. Por "cambiar la existencia" me refiero a insertar un espacio entre dos caracteres no espaciales o eliminar un espacio entre dos caracteres no espaciales, por ejemplo, cambiar var="$val"
a var ="$val"
o viceversa. Quiero preguntar
¿Hay algún caso en el que el uso de un solo espacio o el uso de múltiples espacios consecutivos en un script de shell marque la diferencia? .
(Por supuesto, la inserción / eliminación de un espacio entre comillas hace la diferencia, como cambiar a partir echo "a b"
de echo "a b"
, o viceversa. Busco ejemplos distintos a este ejemplo trivial.)
Me he encontrado con esta pregunta, pero se trata de agregar y eliminar espacios entre dos caracteres que no son espacios, para lo cual conozco muchos ejemplos que marcarían la diferencia.
Cualquier ayuda sería apreciada. Incluya más variedades de conchas si es posible.
fuente
echo
comando con tanto espacio en blanco entre el comando y el argumento.Probablemente esto sea trampa, pero esto:
es diferente de esto:
a pesar de que los espacios no están entre comillas. ;-)
Más confuso, esto:
es diferente de esto:
a pesar de que se ven idénticos!
fuente
Si no hablamos sobre el carácter de espacio (
U+0020
), pero ningún espacio en blanco (U+0020
,\n
,\t
, etc.), a continuación, un caso particular, vienen a la mente: los documentos internos.Este código (usando espacios):
Imprimirá:
Pero este código (usando pestañas):
Imprimirá:
Eso es porque ( como afirma POSIX ):
fuente
<<-
operador. Muchas gracias.También tiene un efecto al escribir declaraciones de asignación. Como si dijera
FOO=xyz
que creará una variable de entorno llamadaFOO
con valorxyz
, pero si separo los iguales con un espacio, pensará que estoy invocando un programa llamadoFOO
con el argumento=xyz
. Entonces sí importa cuando se trata de cierta sintaxis.fuente
FOO=xyz
lo general , crea una variable de shell interna pero no una variable de entorno. Necesitaset -a
oexport FOO=xyz
para eso (es decir, hacer que forme parte del entorno de subprocesos que no son subshell).