Bem, você precisa ter cuidado para que o texto à esquerda de ==
, =~
ou !=
não seja um dos operadores reconhecidos nas expressões condicionais Bash .
No seu caso, -g
testa um conjunto de bits setgid
. Se você tivesse fornecido algo que não é reconhecido como operador nesse contexto, funcionaria:
$ [[ -i == -* ]] ; echo $?
0
$ [[ -i == -? ]] ; echo $?
0
$ [[ -i =~ -.* ]] ; echo $?
0
$ [[ -i =~ -.? ]] ; echo $?
0
Uma forma de fornecer de forma confiável qualquer string seria citá-la, por isso ela é reconhecida não como um operador, mas como apenas uma string:
$ [[ "-good" == -* ]] ; echo $?
0
$ [[ "-g" == -* ]] ; echo $?
0
$ [[ "-g" == -? ]] ; echo $?
0
$ [[ "-good" =~ -.* ]] ; echo $?
0
$ [[ "-g" =~ -.* ]] ; echo $?
0
$ [[ "-g" =~ -.? ]] ; echo $?
0
No entanto, tenha cuidado para não citar o lado direito do operador, pois isso evitará que ele seja reconhecido como um padrão:
$ [[ "-good" == "-*" ]] ; echo $?
1
$ [[ "-g" == "-*" ]] ; echo $?
1
$ [[ "-g" == "-?" ]] ; echo $?
1
$ [[ "-good" =~ "-.*" ]] ; echo $?
1
$ [[ "-g" =~ "-.*" ]] ; echo $?
1
$ [[ "-g" =~ "-.?" ]] ; echo $?
1