2013-06-13 4 views
52

tôi đã có bash sau hai kịch bảnĐi qua cãi nhau với khoảng trống giữa (bash) kịch bản

a.sh:

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

b.sh:

#!/bin/bash 
someApp $* 

Các someApp nhị phân nhận được $* làm 2 đối số ('My' và 'Argument') thay vì 1.

Tôi đã thử nghiệm một vài điều sau:

  • Chạy someApp chỉ qua b.sh công trình như mong đợi
  • Lặp + vang các đối số trong b.sh công trình như mong đợi
  • Sử dụng [email protected] thay vì $* không tạo sự khác biệt
+4

thử 'someApp" $ * "' hoặc 'someApp" $ @ "' –

+1

Yupp - hoạt động như một sự quyến rũ! –

Trả lời

84

$*, không thể viện chứng , mở rộng thành hai từ. Bạn cần báo giá để someApp nhận được một đối số.

someApp "$*" 

Có thể là bạn muốn sử dụng [email protected] thay thế, do đó someApp sẽ nhận hai đối số nếu bạn đã gọi b.sh như

b.sh 'My first' 'My second' 

Với someApp "$*", someApp sẽ nhận một đối số duy nhất My first My second. Với someApp "[email protected]", someApp sẽ nhận được hai đối số, My firstMy second.

+0

Tuyệt vời! Tôi đã rất gần ;-) –

+11

Chìa khóa dễ bỏ lỡ là "$ @" cần được trích dẫn, có vẻ như vậy. $ @ là không đủ. – miracle2k

+1

@ miracle2k Đúng. Unquoted, '$ @' và '$ *' hoạt động giống nhau. – chepner