2013-06-13 12 views
52

ho ottenuto il seguente bash due scriptPassaggio di argomenti con spazi tra (bash) lo script

a.sh:

#!/bin/bash 
./b.sh 'My Argument' 

b.sh:

#!/bin/bash 
someApp $* 

Il binario someApp riceve $* come 2 argomenti ('My' e 'Argument') invece di 1.

Ho provato diverse cose:

  • corsa someApp solo del attraverso b.sh funziona come previsto
  • Iterate + eco gli argomenti a b.sh funziona come previsto
  • Utilizzando [email protected] anziché $* non fa una differenza
+4

try 'someApp" $ * "' o 'someApp" $ @ "' –

+1

Yupp - funziona come un fascino! –

risposta

84

$*, unquoted , si espande in due parole. È necessario citarlo in modo che someApp riceva un singolo argomento.

someApp "$*" 

E 'possibile che si desidera utilizzare [email protected], invece, in modo che someApp sarebbe ricevere due argomenti se si dovesse chiamare b.sh come

b.sh 'My first' 'My second' 

Con someApp "$*", someApp avrebbe ricevuto un singolo argomento My first My second. Con someApp "[email protected]", someApp riceverebbe due argomenti, My first e My second.

+0

Ottimo! Ero così vicino ;-) –

+11

La chiave che è facile non notare è che "$ @" deve essere citato, a quanto pare. $ @ non è abbastanza. – miracle2k

+1

@ miracle2k corretto. Unquoted, '$ @' e '$ *' funzionano in modo identico. – chepner

Problemi correlati