Яке значення $ {GZIP_BINDIR - '/ bin'} у bash?


Відповіді:


19

${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.

Як йдеться на сторінці сторінки, вона встановить значення змінної за замовчуванням GZIP_BINDIR. Якщо GZIP_BINDIRраніше було встановлено значення (відмінне від null, яке ви не використовуєте :), то це значення буде використано, інакше /binбуде використано як значення змінної GZIP_BINDIR.

З іншого боку, якщо ви також хочете перевірити нульові значення, скористайтеся цією схемою (включіть :):

${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}також є дійсним, хоча, схоже, немає на сторінці людини.
nyuszika7h

@ nyuszika7h Так ... я не знав цього раніше ... дивно, чому його не включено до сторінки вкладки ..
heemayl

У розділі bash на моєму комп’ютері в абзаці, розташованому над розділом, :-вказується: "Не виконуючи розширення підрядків, використовуючи форми, задокументовані нижче (наприклад, :-), bash тести для параметра, який не встановлений або недійсний. Опущення двокрапки приводить до тесту лише для параметра, який не встановлений ".
jwodder

В якості побічної ноти ви можете поєднати налаштування PATHта exportв одну команду таким чином:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Paddy Landau

8

Чи дійсно немає двокрапки перед дефісом всередині параметра розширення ${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


2

Ця команда оновить змінну PATH.

Це PATHзмінна середовище, що вказує набір каталогів, де розташовані виконувані програми.

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

Це додає значення іншої змінної, GZIP_BINDIRякщо для виходу з попереднього PATH інше використовувати / bin замість цього і додати його до PATH

export PATH

Експорт використовується для встановлення PATH, доступного для всіх дочірніх процесів та підрозділів. Прочитайте це для отримання додаткової інформації про

Ви повинні зауважити, що це не статично, і ви втратите його, як тільки вийдете з оболонки.

Для того, щоб ця редакція PATH була постійною, ви повинні додати ці рядки до своїх .bashrc

gedit .bashrc

і додайте рядок

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

потім запустіть команду

source .bashrc

GZIP_BINDIR - змінна
Maythux

що не правильно? Ні, я цього не зробив? міна знищена також
Maythux

Чому зволікають ?!
Maythux
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.