Qual é a diferença entre --param = “value” e “--param = value”?

0

No passado, li (não consigo lembrar 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 alternar sistemas / sistemas operacionais / distribuições / shells), você deve sempre fazer --param="value" . Isto é, faça o que chamo de "citação tardia" (coloque a citação em torno da parte final, ou o subconjunto mínimo; não cite a coisa toda).

Eu também vi pessoas fazendo isso ao modificar variáveis (por exemplo, PATH=/bar:"$PATH" , comparado a PATH="/bar:$PATH" ). Em geral, eu diria que, pelo que vi outros fazerem, "citar mais tarde" é mais comum do que citar a coisa toda.

A minha pergunta é: existe realmente uma diferença potencial entre --param="value" e "--param=value" ? Se eu precisar citar algo, há realmente uma diferença entre citar apenas parte dela e citar a coisa toda?

Eu costumo fazer --param="value" em vez de "--param=value" , mas eu faço isso principalmente porque acho mais fácil analisar mentalmente, não porque eu saiba de quaisquer diferenças técnicas.

    
por Cornstalks 01.07.2014 / 00:03

1 resposta

2

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 citação de shell, às vezes eu uso um programa simples que apenas imprime seu argumento. 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;
}
    
por 01.07.2014 / 00:31

Tags