bash 1行:変数をコマンド出力に設定するか、出力が空の場合はデフォルト値に設定

bash 1行:変数をコマンド出力に設定するか、出力が空の場合はデフォルト値に設定

Bashで次の構文を使用できることを知っています。

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

変数が空でない場合editorに設定され、そうでない場合に設定されます。特定のコマンドの出力に設定し、出力が空の場合、いくつかのデフォルト値に設定する同様の1行のコードを生成できますか?このようなもの(たとえば、これは機能しません)new_editornew_editor/usr/bin/vieditor

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

私はいくつかのコードでこれを行う方法を知っていますが、エレガントなソリューションがあるかどうか疑問に思います。

答え1

フロント:

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

関連情報