GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué es legal establecer una variable antes de un comando en Bash?

Acabo de encontrar varias respuestas, como analizar un archivo de texto delimitado... que usan la construcción:

while IFS=, read xx yy zz;do
    echo $xx $yy $zz
done < input_file

donde el IFS la variable se establece antes de read comando.

He estado leyendo la referencia de bash pero no puedo entender por qué esto es legal.

Lo intenté

$ x="once upon" y="a time" echo $x $y

desde el símbolo del sistema de bash pero no se hizo eco de nada. ¿Alguien puede indicarme dónde se define esa sintaxis en la referencia que permite configurar la variable IFS de esa manera? ¿Es un caso especial o puedo hacer algo similar con otras variables?

Respuesta aceptada:

Puede encontrar información relevante en la página de manual proporcionada por el mantenedor de BASH (última consulta en agosto de 2020). Sección Gramática de shell, estados de Comandos simples (énfasis agregado):

Un comando simple es una secuencia de asignaciones de variables opcionales seguido de palabras y redirecciones separadas por espacios en blanco y terminada por un operador de control. La primera palabra especifica el comando a ejecutar y se pasa como argumento cero. Las palabras restantes se pasan como argumentos al comando invocado.

Así que puedes pasar cualquier variable que quieras. Tu echo El ejemplo no funciona porque las variables se pasan al comando, no se establecen en el shell. El shell expande $x y $y antes invocando el comando. Esto funciona, por ejemplo:

$ x="once upon" y="a time" bash -c 'echo $x $y'
once upon a time

Linux
  1. ¿El comando Rm en Bash Script no funciona con variables?

  2. Falla la redirección de la salida del comando a una variable en bash

  3. Ejecute el comando bash en la canalización de jenkins

  4. ¿Por qué usar echo antes de instalar un nuevo software?

  5. ¿Redirigir la salida del comando de tiempo en Unix a una variable en bash?

bash heredoc

Comando de fuente Bash

Comando de historial en Linux (Bash History)

Comando Bash printf

Script Bash (II)

Bash Beginner Series #2:Comprender las variables en Bash Shell Scripting