Ao comparar integer, string e binary no bash, que incluem aspas (simples ou duplo) devo usar e por quê?

0

É errado usar aspas simples para incluir strings / integers diferentes ao compará-las?

Eu usei aspas simples e aspas duplas juntas em um script, na maioria das vezes elas funcionam, mas deve haver uma regra para manter a consistência do script.

Então, qual citação devo usar em qual parte e por quê?

    
por Arnab 17.11.2016 / 19:41

1 resposta

0

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"
    
por 17.11.2016 / 20:05

Tags