$ {1: + “$ @”} в / bin / sh

Я заметил, что иногда скрипты-оболочки используют ${1:+"[email protected]"} для параметров, а не только для "[email protected]" .

Например, http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.sh использует

 exec "$binary" $opts ${1:+"[email protected]"} 

Может ли кто-нибудь сломать ${1:+"[email protected]"} на английский язык и объяснить, почему это было бы преимуществом по сравнению с обычным "[email protected]" ?

«Истерические изюм», иначе исторические причины.

Объяснение от JesperE (или страницы пользователя Bash) является точным для того, что он делает:

Если $ 1 существует и не является пустой строкой, замените цитируемый список аргументов.

Когда-то 20 лет назад некоторые сломанные второстепенные варианты Bourne Shell заменили пустую строку «» на «$ @», если не было никаких аргументов вместо правильного текущего поведения подстановки ничего. Будут ли какие-либо такие системы все еще использоваться, открыты для обсуждения.

[Хм: это расширение не будет работать правильно:

 command '' arg2 arg3 ... 

В этом контексте правильная нотация:

 ${1+"[email protected]"} 

Это работает правильно, является ли $ 1 пустым аргументом или нет. Итак, кто-то неправильно вспомнил обозначение, случайно введя ошибку.]

Чтобы процитировать соответствующую часть man bash для информации, которую упоминал Джонатан Леффлер в своем комментарии:

Если не выполняется расширение подстроки, тесты bash для параметра, который не задан или null ; опускание двоеточия приводит к тесту только для параметра, который не задан .

(акцент мой)

На странице справки bash:

  ${parameter:+word} Use Alternate Value. If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted. 

Таким образом, вместо $1 отменяется "[email protected]" . Я не понимаю, почему они не могли использовать "[email protected]" .

  • Заполнение символов в printf
  • Вкладка «Автозаполнение» в Mac OS X при использовании sftp в терминале
  • определять интервалы последовательных целых последовательностей
  • Есть ли плагин Eclipse для запуска системной оболочки в консоли?
  • Как обновить один файл в zip-архиве
  • Запуск команд оболочки, хотя java-код на Android?
  • Несколько стандартных входных сигналов? Как?
  • Как я могу развить процесс, который не умирает при выходе оболочки?
  • Что означает оператор Баша <<<?
  • Выполнить и получить вывод команды оболочки в node.js
  • Как вставить pg_backend_pid из postgresql в сценарий оболочки и передать его другому процессу?
  • Давайте будем гением компьютера.