Como atribuir um valor a uma variável no Terminal?

Como atribuir um valor a uma variável no Terminal?

No Terminal, como posso definir uma nova variável e atribuir um valor a ela? Digamos que eu queira comparar dois arquivos com nomes longos e também realizar outras operações. Por causa dos nomes de arquivo longos, gostaria de criar duas variáveis, atribuir valor a cada variável e usá-la como espaço reservado. Eu preciso de algo como o seguinte:

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

Responder1

O pseudocódigo (ou código para algum outro shell ou linguagem de programação) na sua pergunta se traduz nos seguintes comandos Bash:

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

A sintaxe $var1éexpansão de parâmetros. Isso substitui a variável var1pelo seu valor – neste caso, pelo nome do arquivo armazenado nela. Gatilhos de expansão de parâmetros sem aspasdivisão de palavras(também chamado de "divisão de campo") eglobulando(também chamado de "expansão de nome de arquivo" e "expansão de nome de caminho"). Normalmente você não quer que essas expansões adicionais ocorram.Exceto quando você sabe especificamente que os deseja, você devecertifique-se de incluirtodas as ocorrências de expansão de parâmetros emaspas duplas. (Aspas simplessão ainda mais poderosos - eles também impediriam que a expansão dos parâmetros acontecesse.)

Isso executa o diffcomando com o nome do arquivo armazenado var1passado como seu primeiro argumento de linha de comando e o nome do arquivo armazenado var2passado como seu segundo argumento de linha de comando.Isso faz com diffque compare o conteúdo dos arquivos, como você pretende, assim como faria se você tivesse executado:

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

Você notará que não usei o exportcomando.Isso porque, neste caso, o exportcomando énem necessário nem apropriadopelo que você está fazendo. Quando o valor de uma variável só precisa ser expandido no seu shell - e nãoacessado por programas iniciados a partir do seu shell--então você não precisa (e não deve) usar export.

Se o seu sistema tivesse um comando estranho diffque lê nomes de arquivos de variáveis ​​de ambiente chamadas var1e var2em vez de usar nomes de arquivos como argumentos de linha de comando, você precisaria exportar suas variáveis. Mas não é assim que difffunciona. O diffcomando não está acessando – e não sabe nada sobre – suas variáveis. O shell os expande para produzir os argumentos para os quais passa diff.

Responder2

Você pode armazenar o nome do arquivo em uma variável no bash simplesmente atribuindo-o

Por exemplo:variable=filename && variable2=filename2

você pode então diffos dois arquivos usando essas variáveis ​​como esta diff $variable $variable2

NB: se os seus nomes de arquivos tiverem espaços, é melhor colocar aspas duplas nos nomes dos arquivos e nas variáveis, especialmente ao realizar operações com eles

informação relacionada