Câu trả lời:
Sử dụng shiftlệ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
$1không trích dẫn chúng "$1", thì shell sẽ thực hiện phân tách từ, do đó, ví dụ foo barsẽ được chuyển tiếp dưới dạng foovà barriê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 10kế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