Ich kann keine Zeichenfolgen übergeben, die #
als Befehlszeilenargumente beginnen .
Hier ist ein einfacher Test:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
printf("%s ", argv[i]);
putchar('\n');
return 0;
}
Wenn ich die Argumente wie folgt eingebe:
2 4 # 5 6
Der Wert von argc
ist 3
und nicht 6
. Es liest #
und stoppt dort. Ich weiß nicht warum und kann die Antwort in meinen Kopien von The C Programming Language und C Primer Plus nicht finden .
c
bash
command-line-arguments
cd-00
quelle
quelle
Antworten:
#
beginnt einen Kommentar in Unix-Shells, ähnlich wie//
in C.Dies bedeutet, dass die Shell, wenn sie die Argumente an das Programm übergibt, alles ignoriert, was auf das # folgt. Wenn Sie es mit einem Backslash oder Anführungszeichen versehen, wird es wie die anderen Parameter behandelt und das Programm sollte wie erwartet funktionieren.
oder
oder
Beachten Sie, dass dies
#
nur am Anfang eines Wortes ein Kommentarzeichen ist. Dies sollte also auch funktionieren:quelle
echo echo Hello, World | bash
. Ist das interaktiv? Oder vielleichtbash <<END
?Wenn Sie den Wert über Befehlszeilenargumente übergeben, müssen Sie die folgenden Anweisungen durchgehen. Die folgenden Zeichen haben in einigen Kontexten eine besondere Bedeutung für die Shell selbst und müssen möglicherweise in Argumenten maskiert werden:
quelle
2 4 \{#,$,&,*} 5 6
Das liegt daran, dass Sie eine
sh
ähnliche Shell verwenden. Zitieren Sie die#
oder entkommen Sie es mit\
und es wird funktionieren.Dies wird als Kommentar in bezeichnet
sh
. Es bewirkt, dass der#
(Leerzeichen-Hash) und alle Argumente danach verworfen werden. Es wird ähnlich wie Kommentare in C verwendet, wo es zum Dokumentieren von Code verwendet wird.Zeichenfolgen, die mit beginnen,
$
werden als Variablen bezeichnet insh
. Wenn Sie keine Variable festgelegt haben, wird diese zu einer leeren Zeichenfolge erweitert.All dies wären beispielsweise gültige Möglichkeiten, um das
#
an Ihre Anwendung weiterzuleiten :Und dies wären gültige Möglichkeiten, um eine Zeichenfolge zu übergeben, beginnend mit
$
:Bitte beachten Sie, dass Variablen in
"
s noch erweitert sind.quelle