2013-06-13 13 views
52

Mam następujący Bash dwa skryptyPrzekazywanie argumentów z przestrzeni między (bash) skryptów

a.sh:

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

b.sh:

#!/bin/bash 
someApp $* 

someApp binarny odbiera $* jako 2 argumenty ("Mój" i "Argument") zamiast 1.

Przetestowałem kilka rzeczy:

  • Running someApp tylko thru b.sh działa zgodnie z oczekiwaniami
  • iteracyjne + echo argumenty b.sh działa zgodnie z oczekiwaniami
  • Korzystanie [email protected] zamiast $* nie czyni różnicy
+4

wypróbuj 'someApp" $ * "' lub 'someApp" $ @ "' –

+1

Yupp - działa jak urok! –

Odpowiedz

84

$*, nienotowanego , rozwija się do dwóch słów. Musisz zacytować, aby someApp otrzymał pojedynczy argument.

someApp "$*" 

Jest możliwe, że chcesz użyć [email protected] zamiast, tak że someApp otrzymałby dwa argumenty, jeśli były zadzwonić b.sh jak

b.sh 'My first' 'My second' 

Z someApp "$*", someApp otrzyma jeden argument My first My second. Przy someApp "[email protected]", someApp otrzyma dwa argumenty, My first i My second.

+0

Świetnie! Byłem tak blisko ;-) –

+11

Kluczem łatwym do pominięcia jest to, że "$ @" musi być cytowany, jak się wydaje. @ @ to za mało. – miracle2k

+1

@ miracle2k Prawidłowe. Niecytowane, '$ @' i '$ *' działają identycznie. – chepner

Powiązane problemy