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 argc
es 3
y 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 6
Es porque estás usando un
sh
shell 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