Vì vậy, tôi có một kịch bản bash mà cần phải có một số tùy ý các đối số dòng lệnh và đặt chúng vào một chuỗi duy nhấtgrabbing tất cả các đối số sau tranh luận thứ n và concatenating chúng lại với nhau trong bash
Ví dụ về những gì người dùng sẽ gõ in:
give <environment> <email> <any number of integers separated by spaces>
give testing [email protected] 1 2 3 4 5
Tôi muốn nhận tất cả các đối số từ $ 3 đến $ # và ghép chúng vào một chuỗi.
của tôi (có lẽ là khủng khiếp) giải pháp ngay bây giờ là
if [ $# -gt 3 ]
then
env="env="$1
email="email="$2
entList=""
for i in {3..$#}
do
if [ $i -eq 3 ]
then
entList=$3
shift
fi;
if [ $i -gt 3 ]
then
entList=$entList","$3
shift
fi;
done
fi;
tôi xử lý các trường hợp chỉ có ba đối số khác một chút, và rằng một hoạt động tốt.
giá trị cuối cùng của $entList
cho ví dụ give testing [email protected] 1 2 3 4 5
nên là: 1,2,3,4,5
Ngay bây giờ khi tôi chạy này tôi nhận được lỗi sau:
/usr/local/bin/ngive.sh: line 29: [: {3..5}: integer expression expected
/usr/local/bin/ngive.sh: line 34: [: {3..5}: integer expression expected
dòng 29 và 34 là:
line 29: if [ $i -eq 3 ]
line 34: if [ $i -gt 3 ]
Mọi trợ giúp sẽ được đánh giá cao.
Một giải pháp chung là lưu 3 đối số đầu tiên, ví dụ: trong biến: 'var1 =" $ 1 "; var2 = "$ 2"; var3 = "$ 3" 'và sau đó sử dụng' shift 3' để loại bỏ 3 đối số đầu tiên, và sau đó sử dụng '" $ * "' để tạo một chuỗi chứa các thông số khác, dấu cách cách nhau: 'rest =" $ * "' . –