Câu trả lời:
Sử dụng shift
lệnh tích hợp để "ăn" các đối số. Sau đó gọi tiến trình con và truyền cho nó "$@"
đối số để bao gồm tất cả các đối số còn lại. Lưu ý các trích dẫn, chúng nên được giữ, vì chúng làm cho việc mở rộng danh sách đối số được trích dẫn chính xác.
$@
về cơ bản coi mỗi phần tử của mảng là một chuỗi được trích dẫn - chúng được truyền qua mà không có cơ hội mở rộng. Nó cũng đảm bảo rằng mỗi được xem như một từ riêng biệt. Giải thích này cùng với một kịch bản thử nghiệm chứng minh sự khác biệt có ở đây: tldp.org/LDP/abs/html/i INTERNalvariables.html
bash sử dụng lệnh shift :
ví dụ: shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 sản xuất
1
2 3
$1
không trích dẫn chúng "$1"
, thì shell sẽ thực hiện phân tách từ, do đó, ví dụ foo bar
sẽ được chuyển tiếp dưới dạng foo
và bar
riêng biệt.
Bash hỗ trợ các tham số tập hợp con (xem Các tập con và các chuỗi con ), vì vậy bạn có thể chọn tham số nào để xử lý / vượt qua như thế này.
mở tập tin mới và chỉnh sửa nó: vim r.sh
:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"
chạy nó:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10
kết quả là:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10