我知道在 Bash 中你可以使用语法
editor=${new_editor:-/usr/bin/vi}
如果变量不为空,则设置editor
为,否则设置为。是否可以生成类似的单行代码,它将设置为某个命令的输出,如果输出为空,则设置为某个默认值?类似的东西(仅作为示例,这不起作用)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 的 shell 中进行嵌套参数扩展,但是zsh
:
$ editor=${$(whence -p emacs):-/usr/bin/vi}
$ print -rl -- $editor
/usr/bin/emacs
或者:
editor=${commands[emacs]-$commands[vi]}