2010-10-22 23 views
38

Nếu tôi chuyển bất kỳ số lượng đối số nào vào một kịch bản trình bao gọi chương trình Java trong nội bộ, làm cách nào để chuyển đối số thứ hai sang chương trình Java ngoại trừ đầu tiên?Chuyển đối số thứ hai trở đi từ một kịch bản lệnh shell sang Java

./my_script.sh abcd ....

#my_script.sh 
... 
java MyApp b c d ... 
+0

liên quan: http://stackoverflow.com/questions/28057815/how-to-get-second-to-last-argument-from-previous-bash-command –

Trả lời

58

đầu tiên sử dụng shift để "tiêu thụ" đối số đầu tiên, sau đó vượt qua "[email protected]", tức là danh sách các đối số còn lại:

#my_script.sh 
... 
shift 
java MyApp "[email protected]" 
+4

Các tham số đặc biệt '@ 'nên" luôn luôn "được trích dẫn:' "$ @" ', nếu không khác với' $ * '. Ngoài ra, nên được đề cập rằng sau khi 'shift', nếu không được lưu trước đó, tham số đầu tiên sẽ bị mất. – enzotib

+0

@enzotib Cảm ơn, tôi đã trích dẫn '$ @'. – Bolo

+3

Không trích dẫn nó làm cho tất cả các đối số được chuyển thành một đối số duy nhất, một danh sách các đối số được phân tách bằng dấu cách? Tôi cho là không, vì sự phổ biến của câu trả lời này, nhưng có lẽ bạn có thể giải thích. –

31

Bạn có thể chuyển đối số thứ hai trở đi mà không sử dụng "shift".

set -- 1 2 3 4 5 

echo "${@:0}" 
echo "${@:1}" 
echo "${@:2}" # here 
+7

không hoạt động trong 'sh', chỉ' bash'. điều này được gọi là mở rộng chuỗi con và có một hành vi đặc biệt cho '@'. thường nó đếm các ký tự, nhưng đối với '@' nó đếm các tham số. – lesmana

Các vấn đề liên quan