$ {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 XP?
  • Почему люди пишут скрипт #! / Usr / bin / env python в первой строке скрипта Python?
  • Подключение n команд с помощью труб в оболочке?
  • Как использовать C ++ в Go?
  • '\ r': команда не найдена
  • Потеря новой строки после присвоения результата grep переменной оболочки
  • Есть ли плагин Eclipse для запуска системной оболочки в консоли?
  • Как я могу использовать синтаксис Bash в целевых файлах Makefile?
  • Есть ли LAME c ++ wraper \ simplifier (работает на Linux Mac и Win из чистого кода)?
  • Как я могу присвоить команду sudo?
  • Как создать задание cron с помощью Bash автоматически без интерактивного редактора?
  • Interesting Posts

    Как подключиться к базе данных JDBC / источнику данных в приложении на основе сервлета?

    Какие плагины кода работают над Eclipse 3.6?

    Как я могу сделать Notepad ++ запоминать все экземпляры себя из последнего сеанса?

    Xamarin Studio – не может войти в систему – один из идентифицированных элементов был в недопустимом формате

    Как создать активность и службу Android, которые используют отдельные процессы

    Отключить передачу-демон при загрузке в Ubuntu 14.04 LTS

    Как запустить Metro-приложение из командной строки в Windows 8?

    Слишком много ссылок на поле: 70613; max – 65536

    Как сохранить закладки Chrome в актуальном состоянии?

    Android Studio 0.8.1 – как использовать SDK для Facebook?

    Как я могу узнать, является ли данная программа 64-разрядной или 32-разрядной версией?

    Rails: переменная экземпляра controllerа доступа в файле ресурса CoffeeScript или JavaScript

    Где разместить переменные $ PATH в zsh?

    VMware Player теряет интернет-соединение

    Как обновить Eclipse для разработчиков Java EE?

    Давайте будем гением компьютера.