Como posso usar nested [] para substituir um if-then-fi? (“[: -F: operador binário esperado”)

3

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
    
por Michael Durrant 20.04.2014 / 19:10

2 respostas

4

Você pode encadear apenas && , não é necessário aninhar condicionais aqui:

[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion

funciona.

    
por 20.04.2014 / 19:19
3

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; } || { ... }

    
por 20.04.2014 / 19:31

Tags