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

  • Как вводить путь с пробелом?
  • Остановите Windows 7 Explorer от автоматического расширения папок
  • Использование sed для массового переименования файлов
  • Выполнить и получить вывод команды оболочки в node.js
  • Как использовать переменные в одиночных кавычках?
  • определять интервалы последовательных целых последовательностей
  • Запустить скрипт как root через ADB
  • Где разместить переменные $ PATH в zsh?
  • Разница между «a = b» и «export a = b» в bash
  • Когда подстановка команд порождает больше подоболочек, чем одни и те же команды в изоляции?
  • bash: Недопустимый номер
  • Давайте будем гением компьютера.