No puedo pasar cadenas que comiencen #como argumentos de línea de comandos.
Aquí hay una prueba simple:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
printf("%s ", argv[i]);
putchar('\n');
return 0;
}
Si ingreso los argumentos de la siguiente manera:
2 4 # 5 6
El valor de argces 3y no 6. Se lee #y se detiene allí. No sé por qué, y no puedo encontrar la respuesta en mis copias de The C Programming Language y C Primer Plus .
c
bash
command-line-arguments
cd-00
fuente
fuente

Respuestas:
#comienza un comentario en shells de Unix, al igual que//en C.Esto significa que cuando el shell pasa los argumentos al programa, ignora todo lo que sigue al #. Escaparlo con una barra diagonal inversa o comillas significará que se trata como los otros parámetros y que el programa debería funcionar como se esperaba.
o
o
Tenga en cuenta que
#es un carácter de comentario solo al comienzo de una palabra, por lo que esto también debería funcionar:fuente
echo echo Hello, World | bash. ¿Eso es interactivo? O tal vezbash <<END?Al pasar el valor a través de los argumentos de la línea de comandos, debe seguir estas instrucciones. Los siguientes caracteres tienen un significado especial para el shell en algunos contextos y es posible que se deban escapar en argumentos:
fuente
2 4 \{#,$,&,*} 5 6Es porque estás usando un
shshell similar. Cita#o escapa usando\y funcionará.Esto se llama un comentario en
sh. Hace#que se descarte el (espacio-hash) y cualquier argumento posterior. Se usa de manera similar a los comentarios en C, donde se usa para documentar el código.Las cadenas que comienzan con
$se denominan variables ensh. Si no ha establecido una variable, se expandirá a una cadena vacía.Por ejemplo, todas estas serían formas válidas de pasar el
#a su aplicación:Y estas serían formas válidas de pasar una cadena que comience con
$:Tenga en cuenta que las variables dentro de
"s todavía se expanden.fuente