Eles não são iguais. De fato, [ "$first_arg" == "major" || "$first_arg" == "minor" ] não é nem uma expressão válida.
Isso ocorre porque [ é um comando equivalente a test e eles não podem usar a alternativa || , que opera no nível entre os comandos. O que poderia ser historicamente considerado correto para alternativa é -o , mas agora está marcado como obsoleto pelo POSIX 1 , que aconselha a reescrever
test "$1" -o "$2"
em
test "$1" || test "$2"
Além das construções test e [ , há também o comando "moderno" [[ test, que por sua vez não aceita -o , mas aceita || .
Assim, todos são válidos e equivalentes:
-
Um teste
[[:if [[ $first_arg == major || $first_arg == minor ]]; then exit 1; fi -
Dois testes
[[:if [[ $first_arg == major ]] || [[ $first_arg == minor ]]; then exit 1; fi -
Dois testes
[(o equivalente padrão):if [ "$first_arg" = major ] || [ "$first_arg" = minor ]; then exit 1; fi
As aspas duplas aroung $first_arg não são necessárias dentro de [[ , pois não há divisão de palavras nem expansão de nome de caminho nele. As aspas devem ser usadas com [ , no entanto. E não faz sentido citar minor nem major . Não apenas aqui, mas com test ou [ também. Isso é porque são cordas simples.
1. Consulte o USO DO APLICATIVO.