Как присвоить значение переменной в Терминале?

Как присвоить значение переменной в Терминале?

Как мне задать новую переменную и присвоить ей значение в Терминале? Допустим, я хочу сравнить два файла с длинными именами, а затем выполнить некоторые другие операции. Из-за длинных имен файлов я хотел бы создать две переменные, присвоить значение каждой переменной и использовать ее в качестве заполнителя. Мне нужно что-то вроде следующего:

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

решение1

Псевдокод (или код для какой-либо другой оболочки или языка программирования) в вашем вопросе транслируется в следующие команды Bash:

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

Синтаксис $var1:расширение параметра. Это заменяет переменную var1ее значением — в данном случае, именем файла, сохраненным в ней. Расширение параметров без кавычек вызываетразделение слов(также называемый «разделением поля») иподстановка(также называется «расширение имени файла» и «расширение имени пути»). Обычно вы не хотите, чтобы происходили эти дальнейшие расширения.За исключением случаев, когда вы точно знаете, что хотите этого., вам следуетобязательно приложитевсе вхождения расширения параметра вдвойные кавычки. (Одинарные кавычки(Они даже более эффективны — они также предотвращают расширение параметров.)

Это запускает diffкоманду с именем файла, сохраненным в var1passed в качестве первого аргумента командной строки, и именем файла, сохраненным в var2passed в качестве второго аргумента командной строки.Это заставляет diffсравнивать содержимое файлов, как вы и намеревались, точно так же, как если бы вы запустили:

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

Вы заметите, что я не использовал эту exportкоманду.Это потому, что в данном случае exportкомандане является ни необходимым, ни целесообразнымдля того, что вы делаете. Когда значение переменной нужно только расширить в вашей оболочке, а недоступ к программам, запущенным из вашей оболочки--тогда вам не нужно (и не следует) использовать export.

Если бы в вашей системе была странная diffкоманда, которая считывает имена файлов из переменных окружения, называемых var1и var2вместо того, чтобы принимать имена файлов в качестве аргументов командной строки, то вам нужно было бы экспортировать ваши переменные. Но это не так diffработает. diffКоманда не получает доступ к вашим переменным и ничего о них не знает. Оболочка расширяет их, чтобы получить аргументы, которые она затем передает в diff.

решение2

Вы можете сохранить имя файла в переменной в bash, просто присвоив ей

Например:variable=filename && variable2=filename2

Затем вы можете использовать diffэти два файла, используя эти переменные, например: diff $variable $variable2

Примечание: если в именах файлов есть пробелы, лучше всего заключать в двойные кавычки имена файлов и переменные, особенно при выполнении операций с ними.

Связанный контент