![¿Cuál es la diferencia entre --param="valor" y "--param=valor"?](https://rvso.com/image/1413932/%C2%BFCu%C3%A1l%20es%20la%20diferencia%20entre%20--param%3D%22valor%22%20y%20%22--param%3Dvalor%22%3F.png)
En el pasado leí (no recuerdo la fuente) que:
./script --param="value"
puede tener resultados diferentes en comparación con:
./script "--param=value"
y que debido a estas diferencias (que pueden resultar evidentes al cambiar de sistema/SO/distribución/shell), siempre debes hacerlo --param="value"
. Es decir, haga lo que yo llamo "citas tardías" (ponga la cita alrededor de la parte final o del subconjunto mínimo; no cite todo).
También he visto a personas hacer esto al modificar variables (es decir PATH=/bar:"$PATH"
, en comparación con PATH="/bar:$PATH"
). En general, diría que, por lo que he visto hacer a otros, "citar tarde" es más común que citar todo el asunto.
Mi pregunta es: ¿existe realmente una diferencia potencial entre --param="value"
y "--param=value"
? Si necesito citar algo, ¿existe realmente una diferencia entre citar sólo una parte y citarlo completo?
Tiendo a hacerlo --param="value"
en lugar de "--param=value"
, pero lo hago principalmente porque creo que es más fácil de analizar mentalmente, no porque sea consciente de diferencias técnicas.
Respuesta1
No hay diferencia, al menos en los casos particulares que has mencionado. El caparazón eliminará los "
caracteres y el resultado final será el mismo. Para depurar problemas de citas de shell, a veces uso un programa simple que simplemente imprime su argv. Por ejemplo,
$ printargs --param="value"
argv[0] = printargs
argv[1] = --param=value
$ printargs "--param=value"
argv[0] = printargs
argv[1] = --param=value
Aquí está el código, como referencia:
#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;
}