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 var1
pelo 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 diff
comando com o nome do arquivo armazenado var1
passado como seu primeiro argumento de linha de comando e o nome do arquivo armazenado var2
passado como seu segundo argumento de linha de comando.Isso faz com diff
que 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 export
comando.Isso porque, neste caso, o export
comando é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 diff
que lê nomes de arquivos de variáveis de ambiente chamadas var1
e var2
em vez de usar nomes de arquivos como argumentos de linha de comando, você precisaria exportar suas variáveis. Mas não é assim que diff
funciona. O diff
comando 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 diff
os 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