Je ne peux pas passer de chaînes commençant par #
comme arguments de ligne de commande.
Voici un test 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 j'entre les arguments comme suit:
2 4 # 5 6
La valeur de argc
est 3
et non 6
. Il lit #
et s'arrête là. Je ne sais pas pourquoi et je ne trouve pas la réponse dans mes copies de The C Programming Language et C Primer Plus .
c
bash
command-line-arguments
cd-00
la source
la source
Réponses:
#
commence un commentaire dans les shells Unix, un peu comme//
dans C.Cela signifie que lorsque le shell passe les arguments au programme, il ignore tout ce qui suit le #. L'échapper avec une barre oblique inverse ou des guillemets signifie qu'il est traité comme les autres paramètres et que le programme devrait fonctionner comme prévu.
ou
ou
Notez que le
#
est un caractère de commentaire uniquement au début d'un mot, donc cela devrait également fonctionner:la source
echo echo Hello, World | bash
. Est-ce interactif? Ou peutbash <<END
- être ?Lorsque vous passez la valeur via des arguments de ligne de commande, vous devez parcourir ces instructions suivantes. Les caractères suivants ont une signification particulière pour le shell lui-même dans certains contextes et peuvent devoir être échappés dans les arguments:
la source
2 4 \{#,$,&,*} 5 6
C'est parce que vous utilisez un
sh
shell de type similaire. Citez-le#
ou échappez-le en utilisant\
et cela fonctionnera.Cela s'appelle un commentaire dans
sh
. Il provoque la suppression du#
(espace-hachage) et de tout argument postérieur. Il est utilisé de manière similaire aux commentaires en C, où il est utilisé pour documenter le code.Les chaînes commençant par
$
sont appelées variables danssh
. Si vous n'avez pas défini de variable, elle se développera en une chaîne vide.Par exemple, tous ces éléments seraient des moyens valides de transmettre le
#
à votre application:Et ce seraient des moyens valides de passer une chaîne commençant par
$
:Veuillez noter que les variables à l'intérieur de
"
s sont toujours développées.la source