Não consigo passar strings começando com #
argumentos de linha de comando.
Aqui está um teste simples:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
printf("%s ", argv[i]);
putchar('\n');
return 0;
}
Se eu inserir os argumentos da seguinte maneira:
2 4 # 5 6
O valor de argc
é 3
e não 6
. Ele lê #
e pára por aí. Não sei por que e não consigo encontrar a resposta em minhas cópias da linguagem de programação C e do C Primer Plus .
c
bash
command-line-arguments
cd-00
fonte
fonte
Respostas:
#
começa um comentário em shells Unix, como//
em C.Isso significa que quando o shell passa os argumentos para o programa, ele ignora tudo após o #. Escapá-lo com uma barra invertida ou aspas significa que ele é tratado como os outros parâmetros e o programa deve funcionar conforme o esperado.
ou
ou
Observe que o
#
caractere é um comentário apenas no início de uma palavra, portanto, isso também deve funcionar:fonte
echo echo Hello, World | bash
. Isso é interativo? Ou talvezbash <<END
?Ao passar o valor pelos argumentos da linha de comando, você deve seguir estas instruções a seguir. Os seguintes caracteres têm um significado especial para o próprio shell em alguns contextos e podem precisar ser ignorados nos argumentos:
fonte
2 4 \{#,$,&,*} 5 6
É porque você está usando um
sh
shell semelhante. Cite#
ou escape usando\
e ele funcionará.Isso é chamado de comentário em
sh
. Isso faz com que o#
(hash de espaço) e quaisquer argumentos depois sejam descartados. É usado de maneira semelhante aos comentários em C, onde é usado para documentar o código.Sequências começando com
$
são chamadas de variáveis emsh
. Se você não definiu uma variável, ela será expandida para uma sequência vazia.Por exemplo, todas essas seriam maneiras válidas de passar
#
para o seu aplicativo:E essas seriam maneiras válidas de passar uma string começando com
$
:Observe que as variáveis dentro de
"
s ainda são expandidas.fonte