¿Qué es la sustitución de variables en la programación de shell?

¿Qué es la sustitución de variables en la programación de shell?

Esta pregunta es muy básica y la hago no sólo para mí sino para otros recién llegados que ven el término.sustitución de variablesy tenga los siguientes pensamientos:

Según tengo entendido, el términosustitución de variablesdescribe "sustituir un valor de una variable en otra", pero dudo que sea correcto.
Me preguntaba por qué esta acción requiere un término especial en lugar de simplemente decir "¿cambiar el valor de una variable editándolo manualmente en un editor de texto?"

Qué essustitución de variablesconcepto en programación de shell y si conoce la respuesta, proporcione un ejemplo práctico de qué tipos de acciones utiliza en su trabajo.

Respuesta1

sustituir un valor de una variable dada en otra.

Esa descripción es errónea por varios motivos. La sustitución de variables reemplaza lanombrede una variable (más algunas tonterías sintácticas) por suvalor. Además, no opera “en” una variable, sino en un comando. El comando podría ser uno que establezca el valor de una variable, pero ese es sólo un caso entre muchos.

Por ejemplo, el comando echo $foomuestra el valor de la variable. El código fuente contiene $fooy la salida correspondiente contiene el valor de la variable foo.

La razón por la que esto se llama "sustitución de variables" es que el shell opera mediante una serie de transformaciones de cadenas (y listas de cadenas). Por ejemplo (simplificado), considere el comando ls -l $dir/*.$ext. Para evaluarlo suceden varias cosas en secuencia:

  1. El shell comienza a analizar el comando y lo divide en tres palabras ls: -ly $dir/*.$ext.
  2. En la tercera palabra, el shell ve dos sustituciones de variables que realizar (eso es lo que significan los signos de dólar en este contexto). Digamos que el valor de dires /some/pathy el valor de extes txt, luego el shell reescribe $dir/*.$exten /some/path/*.txt. Se trata de una sustitución porque el valor de cada variable sustituye la sintaxis del nombre del dólar.
  3. El shell expande el patrón comodín /some/path/*.txta la lista de nombres de archivos coincidentes.
  4. El shell se ejecuta lscon los argumentos que se calcula.

(La sintaxis$foo hace más que sustituir el valor de una variablepero esa es otra historia.)

En la mayoría de los lenguajes de programación, para tomar el valor de una variable, simplemente escribe el nombre de la variable. El shell está diseñado para uso interactivo; si escribe un nombre, se interpreta como una cadena literal. Es por eso que la sintaxis para tomar el valor de una variable tiene un marcador extra que dice "Quiero tomar el valor de una variable".

¿Por qué esta acción requiere un término especial en lugar de simplemente decir "cambiar el valor de una variable editándolo manualmente en un editor de texto"?

La sustitución de variables no tiene nada que ver con cambiar el valor de una variable. Cambiar el valor de una variable es unaasignación.

Por supuesto, una asignación puede contener sustituciones de variables, como cualquier otro comando. Pero las sustituciones de variables no están diseñadas específicamente para asignaciones.

Además, no puedes cambiar el valor de una variable con un editor. Una variable ya declarada tiene un valor en cada proceso, no es una configuración del sistema. Puede tener archivos de configuración que establezcan elinicialvalor de una variable, y puede usar un editor para cambiar ese valor inicial en esos archivos, pero después de eso el valor puede cambiar.

información relacionada