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.