¿Cómo asignar un valor a una variable en Terminal?

¿Cómo asignar un valor a una variable en Terminal?

En Terminal, ¿cómo puedo configurar una nueva variable y asignarle un valor? Digamos que quiero comparar dos archivos con nombres de archivo largos y luego también realizar algunas otras operaciones. Debido a los nombres de archivo largos, me gustaría crear dos variables, asignar un valor a cada variable y utilizarla como marcador de posición. Necesito algo como lo siguiente:

set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2

Respuesta1

El pseudocódigo (o código para algún otro shell o lenguaje de programación) en su pregunta se traduce en los siguientes comandos Bash:

var1='long-file-name1'
var2='long-file-name2'
diff "$var1" "$var2"

La sintaxis $var1esexpansión de parámetros. Esto reemplaza la variable var1con su valor, en este caso, con el nombre del archivo almacenado en ella. Activadores de expansión de parámetros sin comillasdivisión de palabras(también llamado "división de campo") yglobo(también llamado "expansión de nombre de archivo" y "expansión de nombre de ruta"). Por lo general, no desea que se produzcan esas expansiones adicionales.Excepto cuando sabes específicamente que los quieres., deberíaasegúrese de adjuntartodas las apariciones de expansión de parámetros endoble comillas. (Comillas simplesson aún más poderosos: también evitarían que se produzca la expansión de parámetros).

Eso ejecuta el diffcomando con el nombre de archivo almacenado var1como primer argumento de línea de comando y el nombre de archivo almacenado var2como segundo argumento de línea de comando.Esto hace diffque se compare el contenido de los archivos., como pretendes, tal como lo harías si hubieras ejecutado:

diff 'long-file-name-1' 'long-file-name-2'

Notarás que no he usado el exportcomando.Esto se debe a que, en este caso, el exportcomando esni necesario ni apropiadopor lo que estás haciendo. Cuando el valor de una variable sólo necesita expandirse en su shell, y noaccedido por programas iniciados desde su shell--entonces no necesitas (ni deberías) usar export.

Si su sistema tuviera un diffcomando extraño que lea nombres de archivos de variables de entorno llamadas var1y var2en lugar de tomar nombres de archivos como argumentos de línea de comandos, entonces necesitaría exportar sus variables. Pero no es así como difffunciona. El diffcomando no accede a sus variables y no sabe nada sobre ellas. El shell los está expandiendo para producir los argumentos a los que luego pasa diff.

Respuesta2

Puede almacenar el nombre del archivo en una variable en bash simplemente asignándolo

Por ejemplo:variable=filename && variable2=filename2

luego puedes usar difflos dos archivos usando esas variables como esta diff $variable $variable2

NB: si los nombres de los archivos tienen espacios, es mejor poner comillas dobles tanto en los nombres de los archivos como en las variables, especialmente al realizar operaciones con ellos.

información relacionada