c bash command-line-arguments

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



bash command-line-arguments (3)

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

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 .


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.


# 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.

2 4 /# 5 6

o

2 4 ''#'' 5 6

o

2 4 "#" 5 6

Tenga en cuenta que el # es un carácter de comentario solo al comienzo de una palabra, por lo que esto también debería funcionar:

2 4#5 6