Кто-нибудь может объяснить, что означает эта команда?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
${GZIP_BINDIR-'/bin'}
является bash
модель расширения параметров. От man bash
:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
Непосредственно перед этой частью страницы руководства (спасибо @jwodder за уведомление):
Omitting the colon results in a test only for a parameter that is unset.
Как сказано в man-странице, будет установлено значение переменной по умолчанию GZIP_BINDIR
. Если GZIP_BINDIR
имеет предварительно установленное значение (отличное от нуля, поскольку вы не используете :
), то это значение будет использоваться, в противном случае /bin
будет использоваться в качестве значения переменной GZIP_BINDIR
.
С другой стороны, если вы хотите проверить и нулевые значения, используйте этот шаблон (include :
):
${GZIP_BINDIR:-'/bin'}
После этого значение $PATH
будет расширено до значений, которые оно удерживало ранее. Итак, если PATH
раньше было:
/usr/sbin:/usr/bin
Теперь ваше PATH
будет (учитывая GZIP_BINDIR
не установлено):
/bin:/usr/sbin:/usr/bin
export PATH
сделает это PATH
доступным для всех дочерних процессов.
:
в${GZIP_BINDIR-'/bin'}
» Не обязательно.${parameter-word}
тоже допустимо, хотя, похоже, его нет на странице руководства.:-
написано: «Когда не выполняется раскрытие подстроки, используйте формы, задокументированные ниже (например, :-), тесты bash для неустановленного или нулевого параметра. Пропуск двоеточия» приводит к проверке только дляPATH
иexport
в одну команду следующим образом:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Действительно ли нет двоеточия перед дефисом внутри расширения параметра
${GZIP_BINDIR-'/bin'}
?Конструкция такого типа почти всегда пишется с двоеточием,
${GZIP_BINDIR:-'/bin'}
что означает, что «если $ GZIP_BINDIR равен NULL или не задан, установите его в« / bin »»Однако синтаксис вы указали является допустимым, но редко.
${GZIP_BINDIR-'/bin'}
(без двоеточия) означает, что «если $ GZIP_BINDIR не установлен, установите его в« / bin »». Если он установлен (был объявлен), но ему ничего не назначено (например, он равен NULL), то ничего не будет вставлено.Однако здесь может быть ошибка, так как двоеточие после конструкции переменной (...}
:
$ PATH ...) все равно будет вставлено, если установлено значение $ GZIP_BINDIR, но NULL. Так как это добавит двоеточие в начале $ PATH, это приведет к тому, что текущий каталог будет найден первым.Большинство считает, что это проблема безопасности, поскольку она позволяет запускать вредоносную программу с тем же именем, что и у стандартных команд, просто помещая ее в текущий каталог.
Чтобы оставить $ PATH без изменений, если установлено значение $ GZIP_BINDIR, но NULL (пусто), правильный синтаксис будет
${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Чтобы оставить $ PATH без изменений, если $ GZIP_BINDIR либо не установлен, либо установлен, но имеет значение NULL, правильный синтаксис будет
${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
источник
Эта команда обновляет переменную PATH.
PATH
Это переменная окружения , указав набор каталогов , где исполняемые программы расположены.Это добавит значение другой переменной,
GZIP_BINDIR
если выйти из предыдущего PATH, иначе использовать / bin вместо этого и добавить его в PATHЭкспорт используется для установки PATH, доступного для всех дочерних процессов и подоболочек. Прочитайте это для получения дополнительной информации о
Вы должны заметить, что это не статично, и вы потеряете его после выхода из оболочки.
Чтобы сделать это редактирование PATH постоянным, вы должны добавить эти строки в ваш
.bashrc
и добавьте строку
затем запустите команду
источник