bash 单行:将变量设置为命令的输出或如果输出为空则设置为默认值

bash 单行:将变量设置为命令的输出或如果输出为空则设置为默认值

我知道在 Bash 中你可以使用语法

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

如果变量不为空,则设置editor为,否则设置为。是否可以生成类似的单行代码,它将设置为某个命令的输出,如果输出为空,则设置为某个默认值?类似的东西(仅作为示例,这不起作用)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 的 shell 中进行嵌套参数扩展,但是zsh

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

或者:

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

相关内容