Você pode encadear apenas &&
, não é necessário aninhar condicionais aqui:
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
funciona.
No meu arquivo .bashrc eu tenho:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then . /etc/bash_completion; fi
Eu queria usar []
em vez de if then fi
Eu já tenho
[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ "${BASH_VERSINFO[0]}" -ge 4 ] && shopt -s autocd
[ -f ~/.git-completion.bash ] && source ~/.git-completion.bash
então pensei que talvez pudesse usar
[ [ -f /etc/bash_completion ] && [! shopt -oq posix] ] && . /etc/bash_completion
mas eu recebo
-bash: [: -f: binary operator expected
Você confunde dois comandos. [
não é equivalente a if
. [
é equivalente a test
.
if
não é nem um comando simples, mas uma palavra reservada (como [[
), parte de uma estrutura de controle. if ... then ... else ... fi
é quase equivalente a ... && { ...; true; } || { ... }