Kann '#' nicht als Kommandozeilenargument übergeben




bash command-line-arguments (2)

Es liegt daran, dass Sie eine sh artige Muschel verwenden. Zitiere das # oder entkomme es mit \ und es wird funktionieren.

Dies nennt man einen Kommentar in sh . Es bewirkt, dass das # (Leerzeichen-Hash) und alle darauf folgenden Argumente verworfen werden. Es wird ähnlich wie Kommentare in C verwendet, wo es zum Dokumentieren von Code verwendet wird.

Zeichenfolgen, die mit $ werden in sh als Variablen bezeichnet . Wenn Sie keine Variable festgelegt haben, wird sie zu einer leeren Zeichenfolge erweitert.

All dies sind beispielsweise gültige Methoden, um das # an Ihre Anwendung zu übergeben:

2 4 '#' 5 6
2 4 "#" 5 6
2 4 \# 5 6

Und dies wären gültige Möglichkeiten, eine Zeichenfolge zu übergeben, die mit $ beginnt:

2 4 '$var' 5 6
2 4 '$'var 5 6
2 4 \$var 5 6

Bitte beachten Sie, dass die Variablen in " s " noch erweitert sind.

Ich kann keine Zeichenfolgen übergeben, die mit # 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 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 .


Wenn Sie den Wert über Befehlszeilenargumente übergeben, müssen Sie die folgenden Anweisungen befolgen. Die folgenden Zeichen haben in einigen Kontexten eine besondere Bedeutung für die Shell selbst und müssen möglicherweise in Argumenten maskiert werden:

` 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






command-line-arguments