2016-04-20 13 views
2

Mein Python-Programm program.py druckt Text mit Leerzeichen, und mein C-Programm a.out erwartet nur ein einzelnes Befehlszeilenargument. Warum gibt es ein unterschiedliches Verhalten zwischen diesen beiden Methoden ... d. H. Warum funktioniert Methode 1 und nicht Methode 2?C-Programm Befehlszeilenargument mit Leerzeichen

Methode 1:

# program.py 
print("Hello world") 

Terminal:

> ./a.out "$(python program.py)" 
// Program successfully run 

Methode 2:

# program.py 
print("\"Hello world \"") 

Terminal:

> ./a.out $(python program.py) 
// Error- only one command line argument expected 
+3

... weil Ihre Kommandozeilen-Shell '$' und '(' und ')' als Teil des Befehls interpretiert und nicht Teil eines einzelnen String-Arguments ist. Verwenden Sie '' 'um Ihr Kommandozeilenargument, wie Sie es zuerst getan haben. – Jens

+1

Sehr interessant. Im zweiten Fall erhalten Sie das erste Attribut' 'Hallo' und die zweite' Welt' '.Es scheint, dass Bash Anführungszeichen und Escapezeichen ignoriert, wenn das Ergebnis von '$()' repariert wird. – Marian

Antwort

0

Methode 1:

./a.out "$(python program.py)"

./a.out "$ (Python program.py)" als String
echo "$(python program.py)" prints "$(python program.py)"

Methode verwenden, wird 2:

./a.out $(python program.py)

./a.out verwendet das Ergebnis von $ (python program.py) als Argument.
echo $(python program.py) wird das Programm ausführen, und was gedruckt wird, wird als Argument verwendet.

Da Sie Hello world gedruckt haben, wird es Hello als erstes Argument und Welt als zweites Argument verwenden. es führt zu so etwas wie
./a.out Hello World

0

Anscheinend, wenn Sie einen $ etwas verwenden, wird es immer in mehreren Parametern aufgeteilt werden, wenn man Räume in ihm. Schauen Sie sich einmal an, wie $ 1 funktioniert, es ist das gleiche Verhalten. Dann funktioniert Ihr $ (Befehl) gleich. Deshalb müssen Sie Anführungszeichen setzen.

Ich habe versucht:

ls $(echo '"Hello World!"') 

es das gleiche Verhalten als Ihre zweite Methode hat.

Und:

ls "$(echo 'Hello World!')" 

Ist das gleiche, als die erste Methode.

Verwandte Themen