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