Как мне задать новую переменную и присвоить ей значение в Терминале? Допустим, я хочу сравнить два файла с длинными именами, а затем выполнить некоторые другие операции. Из-за длинных имен файлов я хотел бы создать две переменные, присвоить значение каждой переменной и использовать ее в качестве заполнителя. Мне нужно что-то вроде следующего:
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
команду с именем файла, сохраненным в var1
passed в качестве первого аргумента командной строки, и именем файла, сохраненным в var2
passed в качестве второго аргумента командной строки.Это заставляет 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
Примечание: если в именах файлов есть пробелы, лучше всего заключать в двойные кавычки имена файлов и переменные, особенно при выполнении операций с ними.