Синтаксис установки переменной окружения

Синтаксис установки переменной окружения

12.01.2018 11:27:55 Просмотров 31 Источник

Объясните синтаксис установки переменной окружения в линукс.

Например здесь:

export PATH=~/folder:${PATH}

Зачем нужна часть после двоеточия? Что она делает? Почему нельзя написать просто export PATH=~/folder ?

Отличается ли эта команда чем-то принципиальным от такого:

export PATH=$PATH:~/folder ?

Почему в первом варианте путь указан до двоеточия, а часть с PATH после двоеточия, а во втором варианте наоборот? Будут ли они работать по-разному? Почему в первом варианте ставятся фигурные скобки вокруг PATH, а во втором не ставятся? В чём разница?

У вопроса есть решение - Посмотреть?

Ответы - Синтаксис установки переменной окружения / Синтаксис установки переменной окружения

Является ответом!
de_frag

12.01.2018 12:00:17

Переменная PATH указывает список каталогов и их порядок, в которых будет осуществляться поиск исполняемого файла оболочкой системы.

Например echo $PATH,

/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

Зачем нужна часть после двоеточия?

Если написать так export PATH=~/folder, то переменная PATH потеряет предыдущее значение и будет равна исключительно тому, что ей присвоено. В результате, например, ls -l будет доступен только по абсолютному пути /bin/ls -l.

Чтобы сохранить текущее значение PATH, его надо добавить после двоеточия:

export PATH=~/folder:$PATH

либо наоборот, до двоеточия:

export PATH=$PATH:~/folder

В результате к переменной PATH будет добавлен каталог ~/folder (в начале, либо в конце) с сохранением предыдущих путей. Если ~/folder идет в начале, то поиск будет начинаться с этого каталога, если же в конце, то, соответственно, в нем исполняемый файл будет икаться в последнюю очередь (при условии, что он не будет найден в любом из предыдущих каталогов).

Фигурные скобки в данном случае непринципиальны, т.е. приведут к одинаковому результату. А так они нужны для расширенной подстановки переменных, разных вычислений и манипуляций со значениями. Все это подробно с примерами есть в Advanced Bash-Scripting Guide.

https://ru.stackoverflow.com/questions/769737/%d0%a1%d0%b8%d0%bd%d1%82%d0%b0%d0%ba%d1%81%d0%b8%d1%81-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b8-%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%bd%d0%be%d0%b9-%d0%be%d0%ba%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f/769753#comment1200295_769753
Спасибо, теперь всё стало понятно )) А то в сети много рецептов, в которых просто написано, что нужно вбивать в терминал, но не написано, почему именно так.
aleksandr barakin

12.01.2018 12:14:22

Зачем нужна часть после двоеточия? Что она делает?

это просто присвоение значения переменной:

имя_переменной=значение

Почему нельзя написать просто export PATH=~/folder ?

можно, конечно. но переменная в этом случае получит совсем другое значение.

Отличается ли эта команда чем-то принципиальным от такого:
export PATH=$PATH:~/folder ?

принципиально — ничем. просто в переменную попадут разные значения.

Почему в первом варианте путь указан до двоеточия, а часть с PATH после двоеточия, а во втором варианте наоборот? Будут ли они работать по-разному?

тут уже вопрос из совсем другой области, связанной не с синтаксисом, а с семантикой: ведь значение специальной переменной окружения PATH оказывает непосредственное влияние на процесс поиска команд: если команда не опознана как функция, псевдоним или встроенная команда оболочки, то поиск её производится в каталогах, перечисленных через двоеточие в этой самой переменной. каталоги перебираются слева направо, пока в очередном каталоге не будет найден исполняемый файл, имя которого совпадает с командой, потому порядок упоминания каталогов — важен: ведь файлы с одним и тем же именем (но с разным содержимым) могут встретиться в разных каталогах.

Почему в первом варианте ставятся фигурные скобки вокруг PATH, а во втором не ставятся? В чём разница?

способы указания значения переменной — $имя и ${имя} — абсолютно равноценны. второй способ можно рассматривать как один (наиболее простой) из вариантов записи т.н. parameter expansion: ${имя:-слово}, ${имя%слово} и т.п.

также второй способ удобно (а порой и необходимо) применять для исключения неоднозначности. например, запись $имя_ будет трактоваться как значение переменной с именем имя_, а запись ${имя}_ будет трактоваться как значение переменной с именем имя, к которому (значению) справа добавлен символ _.

Закрыть X