Intereting Posts
Как восстановить файлы с одного поврежденного диска mdadm raid1? «Недостаточно, чтобы запустить массив» Сохранять только успешные команды в истории BASH grep поиск любого числа в диапазоне Наличие файла id_rsa.pub в моем защищенном репозитории dotfiles URL с именем хоста не работает, но он работает с IP-адресом Сделать экран работать как терминал (прокрутка + альтернативный экран) Как я могу найти порядок сортировки для ls с моей локалью? Как добавить столбец в начало файла с помощью perl? ограничить доступ к учетным записям для учащихся, предоставить доступ к факультету VBoxManage: ошибка: не может использоваться как запрошенное устройство Есть ли хороший инструмент мониторинга ресурсов в Linux? Пересмотр пользователей, у которых установлены настройки по умолчанию / bin / bash Как использовать языковой перевод в Bash? Загрузка CentOS7 в графическом режиме CentOS eth0 не запускается

bash one-liner: установить переменную на вывод команды или значение по умолчанию, если вывод пуст

Я знаю, что в Bash вы можете использовать синтаксис

editor=${new_editor:-/usr/bin/vi} 

который будет устанавливать editor в new_editor если переменная new_editor не пуста и в /usr/bin/vi иначе. Можно ли создать аналогичный однострочный, который будет устанавливать editor для вывода некоторой команды и некоторого значения по умолчанию, если выход пуст? Что-то вроде (только как пример, это не работает)

 editor=$( $(which emacs) :-/usr/bin/vi ) 

Я знаю, как это сделать в нескольких строках кода, но хотелось бы знать, существует ли элегантное решение.

POSIXLY:

 $ : "${editor:=$(command -v emacs)}" "${editor:=/usr/bin/vi}" $ printf '%s\n' "$editor" emacs 

Вы не можете делать вложенное расширение параметров в любых оболочках, подобных Bourne, но zsh :

 $ editor=${$(whence -p emacs):-/usr/bin/vi} $ print -rl -- $editor /usr/bin/emacs 

или:

 editor=${commands[emacs]-$commands[vi]}