No passado eu li (não me lembro a fonte) que:
./script --param="value"
pode ter resultados diferentes em comparação com:
./script "--param=value"
e que devido a essas diferenças (que podem se tornar aparentes ao trocar de sistemas/sistemas operacionais/distribuições/shells), você deve sempre fazer --param="value"
. Ou seja, faça o que chamo de "citação tardia" (coloque a citação na parte final ou no subconjunto mínimo; não cite tudo).
Também vi pessoas fazerem isso ao modificar variáveis (ou seja PATH=/bar:"$PATH"
, em comparação com PATH="/bar:$PATH"
). Em geral, eu diria que, pelo que vi outros fazerem, "citar tardiamente" é mais comum do que citar tudo.
Minha pergunta é: existe realmente uma diferença de potencial entre --param="value"
e "--param=value"
? Se eu precisar citar algo, há realmente uma diferença entre citar apenas parte e citar tudo?
Costumo fazer --param="value"
em vez de "--param=value"
, mas faço isso principalmente porque acho que é mais fácil analisar mentalmente, não porque esteja ciente de quaisquer diferenças técnicas.
Responder1
Não há diferença, pelo menos nos casos específicos que você mencionou. O shell removerá os "
caracteres e o resultado final será o mesmo. Para depurar problemas de cotação de shell, às vezes uso um programa simples que apenas imprime seu argv. Por exemplo,
$ printargs --param="value"
argv[0] = printargs
argv[1] = --param=value
$ printargs "--param=value"
argv[0] = printargs
argv[1] = --param=value
Aqui está o código, para referência:
#include <stdio.h>
int main(int argc, char** argv)
{
int i;
for (i = 0; i < argc; ++i) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}