$ {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]"
?
- Как перенаправить вывод на переменную в оболочке?
- Бесполезное использование кошки?
- Многострочная строка с дополнительным пространством (сохраненный отступ)
- Можно ли перечислить имена файлов (или их родительские каталоги), которые были недавно удалены с помощью rm в OS X?
- Зацикливание результатов `ls` в скрипте оболочки bash
- Как выполнить итерацию по диапазону чисел, определяемых переменными в Bash?
- Как вставить pg_backend_pid из postgresql в сценарий оболочки и передать его другому процессу?
- Как использовать '-prune' вариант 'find' в sh?
- Разница между «a = b» и «export a = b» в bash
- Какой код возврата мне нужен в PS *, чтобы убедиться, что терминал вернулся в обычные настройки в командной строке?
- Как присвоить данные для команды curl?
- Как скрыть вывод команды в bash
- Попытка разбить строку на две переменные
«Истерические изюм», иначе исторические причины.
Объяснение от 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]"
.