2016-09-20 5 views
1

Angenommen ./program ist ein Programm, das nur die Parameter ausgibt;Bash pass Variable als Argument mit Anführungszeichen

$ ./program "Hello there" 
Hello there 

Wie kann ich Argumente mit Anführungszeichen aus einer Variablen übergeben? Ich versuche das zu tun;

$ args='"Hello there"' 
$ echo ${args} 
"Hello there" 
$ ./program ${args} 
Hello there # This is 1 argument 

sondern, wenn ich durch eine Variable gehen scheinen die Zitate in args so erhalte ich ignoriert zu werden;

$ args='"Hello there"' 
$ echo ${args} 
"Hello there" 
$ ./program ${args} 
"Hello there" # This is 2 arguments 

Ist es möglich bash behandeln die Anführungszeichen, als ob ich sie selbst in den ersten Code-Block eingegeben?

+0

'./program "$ {args}"' – redneb

+0

@redneb Versucht das, es behandelt es immer noch als 2 Argumente ("Hallo" und "da") – user2249516

+4

Dann ist 'Programm' gebrochen. –

Antwort

2

Ich weiß nicht, wo Sie program aus, aber es scheint, dass es kaputt ist. Hier ist ein richtiger Weg, um es in bash zu schreiben:

#!/bin/bash 

for arg in "[email protected]"; do 
    echo "$arg" 
done 

Dies jedes Argument in einer separaten Zeile gedruckt werden, damit sie leichter unterscheiden (es wird natürlich ein Problem mit Argumenten, die einen Zeilenumbruch enthalten, aber wir wird ein solches Argument nicht bestehen).

Nachdem Sie die oben als program gespeichert haben und gab ihm die Erlaubnis ausführen, versuchen Sie dies:

$ args='"Hello there"' 
$ ./program "${args}" 
"Hello there" 

während

$ args='"Hello there"' 
$ ./program ${args} 
"Hello 
there" 
+0

Gotcha, aber das Problem ist, wenn ich es von Hand schreibe ich bekomme unterschiedliche Ergebnisse. './program" Hallo da! "' ist ein Argument ohne die Anführungszeichen, während './program" $ {args} "' ein Argument mit den Anführungszeichen ist. Verstehen Sie, worauf ich hinaus will? Ersteres produziert 'Hallo dort', während letzteres 'Hallo' da kommt, sie sind nicht dieselben Argumente – user2249516

+0

Probieren Sie dieses' ./program '"Hallo"' 'dann. – redneb

+0

Ich muss die Anführungszeichen in der Variablenform loswerden, nicht umgekehrt. Damit kann ich './program" $ {args} "' ausführen und bekomme die gleiche Ausgabe wie bei './program" Hello there "' – user2249516