Alguns shells históricos implementaram um analisador muito simples que poderia ficar confuso com coisas como [ -n = "" ]
, em que o primeiro operando para =
se parece com um operador e analisaria isso como [ -n = ]
ou causaria um erro de sintaxe. Em [ "x$1" = x"" ]
, o prefixo x
garante que x"$1"
não possa ser semelhante a um operador e, portanto, a única maneira de o shell analisar esse teste é tratar =
como um operador binário.
Todas as shells modernas, e até mesmo as mais antigas ainda em operação, seguem as regras POSIX que exige que todas as expressões de teste de até 4 palavras sejam analisadas corretamente. Portanto, [ -z "$1" ]
é uma maneira apropriada de testar se $1
está vazio e [ "$x" = "$y" ]
é uma maneira apropriada de testar a igualdade de duas variáveis.
Mesmo alguns shells atuais podem se confundir com expressões mais longas, e algumas expressões são realmente ambíguas, evite usar os operadores -a
e -o
para construir testes booleanos mais longos e, em vez disso, use chamadas separadas para [
e os operadores booleanos &&
e ||
do próprio shell.