bash one-liner: defina a variável para a saída do comando ou para o valor padrão se a saída estiver vazia

0

Eu sei que no Bash você pode usar a sintaxe

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

que definirá editor para new_editor se a variável new_editor não estiver vazia e para /usr/bin/vi caso contrário. É possível produzir uma linha de uma linha semelhante, que irá definir editor para a saída de algum comando e para algum valor padrão se a saída estiver vazia? Algo como (apenas como exemplo, isso não funciona)

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

Eu sei como fazer isso em várias linhas de código, mas gostaria de saber se existe uma solução elegante.

    
por John Smith 24.11.2016 / 10:51

1 resposta

2

POSIXLY:

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

Você não pode fazer expansões de parâmetros aninhados em qualquer shells parecidos com Bourne, mas zsh :

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

ou:

editor=${commands[emacs]-$commands[vi]}
    
por 24.11.2016 / 15:08