Bashで次の構文を使用できることを知っています。
editor=${new_editor:-/usr/bin/vi}
変数が空でない場合editor
に設定され、そうでない場合に設定されます。特定のコマンドの出力に設定し、出力が空の場合、いくつかのデフォルト値に設定する同様の1行のコードを生成できますか?このようなもの(たとえば、これは機能しません)new_editor
new_editor
/usr/bin/vi
editor
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]}