Digamos que temos 2 inteiros em um script bash:
value1=5
value2=3
Então por que precisamos usar aspas duplas no caso de um teste? Por exemplo:
if [[ "$value1" -eq "$value2" ]]
Por que não usar apenas o seguinte?
if [[ $value1 -eq $value2 ]]
Para mim, as aspas duplas não fazem o menor sentido.
Você realmente não precisa das citações aqui. Este é um dos poucos casos em que é seguro usar uma variável sem aspas. Você pode confirmar isso com
set -x
:Como você pode ver acima, as versões citadas e não citadas do teste são resolvidas exatamente da mesma forma pelo bash. O mesmo deve ser verdade para
zsh
e, eu acho, qualquer outro shell que suporte o[[ ]]
operador.Observe que este não é o caso do mais portátil
[ ]
:A
[ ]
construção, ao contrário da[[ ]]
primeira, requer citação.Alguns links úteis para saber mais sobre quando e por que a cotação é necessária:
Mesmo que as aspas duplas não sejam necessárias, as razões para usá-las são:
value1
evalue2
são variáveis, e você pode não saber o que eles contêm. Caso contrário, você também pode perguntar: "Por que se preocupar com variáveis em vez de verificarif [[ 5 -eq 3 ]]
? Ou indo mais longe, por que se preocupar com oif
quando você já sabe que 5 não é igual a 3? Muitas vezes é melhor ficar na defensiva. (É verdade que a divisão de palavras não acontecerá em[[
, mas os casos em que a divisão de palavras não acontece são raros. Novamente, veja o primeiro ponto.)Divisão de palavras.
Este exemplo é muito improvável, mas possível , então se você quiser codificar defensivamente, cubra seus rastros com aspas:
OK, tudo bem até agora. Vamos jogar a chave nas engrenagens:
Ops.
Ahh.
Não está diretamente relacionado à sua pergunta, mas eu uso
quando comparo números, mas lá você também não precisa usar aspas.
Você está absolutamente certo!
A citação entre colchetes duplos não faz sentido algum, pelo menos neste caso.
Mas como eu uso aspas duplas diariamente - especialmente para expressões de colchetes simples, passando argumentos para funções e scripts, bem como atribuição de variáveis às vezes (o que é completamente inútil para declarações simples) - acho que algumas pessoas, pelo menos eu, escreva aspas duplas em torno de expansões de variáveis instintivamente .
Um benefício de fazer aspas duplas consequentemente e de forma compreensível – mas apenas quando fizer sentido – é que os colegas de trabalho que são novos no bash podem aprender a escrever scripts mais estáveis . Também acentua o fato de que a arte do processamento de dados com bash é mais sobre separar fluxos de dados (incluindo variáveis) por separadores de campo e canalizá-los através de filtros . Assim que você separar seus pedaços de dados do fluxo, mantenha-os juntos com aspas duplas!
Outro benefício poderia ser a melhor legibilidade de scripts bash com strings entre aspas duplas em um editor de realce de código .