No se puede pasar '#' como argumento de línea de comando




bash command-line-arguments (2)

No puedo pasar cadenas que comiencen con # 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 argumentos de la siguiente manera:

2 4 # 5 6

El valor de argc es 3 y no 6 . 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 .


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:

` Backtick (U+0060 Grave Accent)
~ Tilde (U+007E)
! Exclamation mark (U+0021)
# Hash (U+0023 Number Sign)
$ Dollar sign (U+0024)
& Ampersand (U+0026)
* Asterisk (U+002A)
( Left Parenthesis (U+0028)
) Right parenthesis (U+0029)
 (⇥) Tab (U+0009)
{ Left brace (U+007B Left Curly Bracket)
[ Left square bracket (U+005B)
| Vertical bar (U+007C Vertical Line)
\ Backslash (U+005C Reverse Solidus)
; Semicolon (U+003B)
' Single quote / Apostrophe (U+0027)
" Double quote (U+0022)
↩ New line (U+000A)
< Less than (U+003C)
> Greater than (U+003E)
? Question mark (U+003F)
  Space (U+0020)1

Es porque estás usando una concha tipo sh . Cite el # o escape usando \ y funcionará.

Esto se llama un comentario en sh . Causa el # (espacio-hash) y cualquier argumento después de que se descarte. 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 en sh . 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:

2 4 '#' 5 6
2 4 "#" 5 6
2 4 \# 5 6

Y estas serían formas válidas de pasar una cadena que comience con $ :

2 4 '$var' 5 6
2 4 '$'var 5 6
2 4 \$var 5 6

Tenga en cuenta que las variables dentro de " s todavía se expanden.





command-line-arguments