$ {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]"
?
- Может ли GNU создавать имена файлов с пробелами?
- Как вызвать bash, запустить команды внутри новой оболочки и затем вернуть управление пользователю?
- Как получить абсолютный путь к произвольному файлу из OS X
- Как удалить файлы в командной строке с регулярными выражениями?
- Как запустить файлы в C #
- Очистить терминал с помощью сочетания клавиш
- Ssh зависает при попытке подключения к некоторым хостам
- Как я могу развить процесс, который не умирает при выходе оболочки?
- «Noshell» для пользователей прокси-сервера ssh
- Переименуйте несколько файлов, заменив определенный шаблон в именах файлов, используя сценарий оболочки
- Как удалить расширение имени файла в сценарии оболочки?
- Дождитесь завершения команды оболочки
- Как зашифровать несколько файлов в отдельные архивы?
«Истерические изюм», иначе исторические причины.
Объяснение от 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]"
.