Algumas coisas que você deseja observar ao escolher se deseja usar aspas simples ou duplas nas comparações:
As expansões devem funcionar?
As aspas simples basicamente significam que você deseja o valor literal da string. Portanto, eles não são realmente úteis na maioria dos casos em que você deseja fazer comparações, pois geralmente você desejará comparar variáveis. Comparar '$ variable1' e '$ variable2' resultará em false everytime , já que você estará comparando as strings literais e não os valores das variáveis.
As aspas duplas ainda permitem que algumas expansões aconteçam (consulte a seção "Cotação" da página man bash
para obter mais detalhes). No exemplo acima, "$ variable1" e "$ variable2" serão realmente expandidos para os valores contidos nas variáveis, que serão então comparadas.
Esteja ciente das strings vazias!
Ao usar test
para comparar o valor de strings, saiba que a expansão de uma string vazia sem colocar aspas duplas pode resultar em erros de sintaxe . Por exemplo, o código a seguir funcionaria e induziria você a pensar que ele está livre de erros:
str="STRING"
if [ $str = "STRING" ]; then
echo "EQUAL"
fi
Mas então, se em algum momento você tivesse uma string vazia, a bash reclamaria de esperar por um operador unário. Isso porque o código se expandiria para:
str=""
if [ = "STRING" ]; then
echo "EQUAL"
fi
E =
não é um operador unário, apesar de ter apenas um parâmetro após ele. Para evitar isso, use aspas duplas em torno do nome da variável na comparação como esta:
str="STRING"
if [ "$str" = "STRING" ]; then
echo "EQUAL"
fi
Há outras coisas que devem ser lembradas ao escolher aspas (como escapar de alguns caracteres especiais - $, ', \ e! quando a expansão do histórico é ativada - em aspas duplas), mas basicamente Se você quiser uma string literal, use aspas simples. Quando você precisar de algumas expansões para trabalhar, use aspas duplas. Você também pode misturá-los se quiser (isso evita alguns escapes):
hello='Hello World'
mystring="$hello"'!'
echo "$mystring"