OnWorks Linux và Windows Online WorkStations

Logo

Lưu trữ trực tuyến miễn phí cho máy trạm

<Trước | Nội dung | Tiếp theo>

Xử lý các tham số vị trí En masse

Đôi khi rất hữu ích khi quản lý tất cả các tham số vị trí như một nhóm. Ví dụ, chúng ta có thể muốn viết một "wrapper" cho một chương trình khác. Điều này có nghĩa là chúng ta tạo một script hoặc hàm shell để đơn giản hóa việc gọi một chương trình khác. Trong trường hợp này, trình bao bọc cung cấp một danh sách các tùy chọn dòng lệnh phức tạp và sau đó chuyển một danh sách các ý kiến ​​cho chương trình cấp thấp hơn.

Vỏ cung cấp hai tham số đặc biệt cho mục đích này. Cả hai đều mở rộng thành danh sách đầy đủ các tham số vị trí, nhưng khác nhau theo những cách khá tinh tế. Họ đang:


Bảng 32-1: Các thông số đặc biệt * và @


Mô tả về Thông Số

Mô tả về Thông Số

$ * Mở rộng thành danh sách các tham số vị trí, bắt đầu bằng 1. Khi được bao quanh bởi dấu ngoặc kép, nó sẽ mở rộng thành một chuỗi được trích dẫn kép chứa tất cả các tham số vị trí, mỗi tham số được phân tách bằng ký tự đầu tiên của biến shell IFS (theo mặc định là dấu cách tính cách).


hình ảnh

$ @ Mở rộng thành danh sách các tham số vị trí, bắt đầu bằng 1. Khi được bao quanh bởi dấu ngoặc kép, nó sẽ mở rộng mỗi tham số vị trí thành một từ riêng biệt được bao quanh bởi dấu ngoặc kép.


hình ảnh


Đây là một đoạn script cho thấy những paramaters đặc biệt này đang hoạt động:

Xử lý các tham số vị trí En Masse


#! / bin / bash

# posit-params3: script để chứng minh $ * và $ @ print_params () {

echo "\ $ 1 = $ 1" echo "\ $ 2 = $ 2" echo "\ $ 3 = $ 3" ​​echo "\ $ 4 = $ 4"

}


pass_params () {

echo -e "\ n" '$ *:'; print_params $ * echo -e "\ n" '"$ *":'; print_params "$ *" echo -e "\ n" '$ @:'; print_params $ @ echo -e "\ n" '"$ @":'; print_params "$ @"

}


pass_params "word" "từ có dấu cách"

#! / bin / bash

# posit-params3: script để chứng minh $ * và $ @ print_params () {

echo "\ $ 1 = $ 1" echo "\ $ 2 = $ 2" echo "\ $ 3 = $ 3" ​​echo "\ $ 4 = $ 4"

}


pass_params () {

echo -e "\ n" '$ *:'; print_params $ * echo -e "\ n" '"$ *":'; print_params "$ *" echo -e "\ n" '$ @:'; print_params $ @ echo -e "\ n" '"$ @":'; print_params "$ @"

}


pass_params "word" "từ có dấu cách"


Trong chương trình khá phức tạp này, chúng tôi tạo hai đối số: “từ” và “từ có dấu cách” và chuyển chúng đến pass_params hàm số. Đến lượt nó, chức năng đó chuyển chúng cho print_params , sử dụng từng phương pháp trong số bốn phương thức có sẵn với các tham số đặc biệt $* $@. Khi được thực thi, tập lệnh cho thấy sự khác biệt:


hình ảnh

[tôi @ linuxbox ~] $ vị trí-param3


$ *:


$1

=

lời

$2

=

từ

$3

=

với

$4

=

không gian

"$ *":


$1

=

các từ có dấu cách

$2

=

$3

=

$4

=

$ @:


$1

=

lời

$2

=

từ

$3

=

với

$4

=

không gian

"$ @":

$ 1 = từ


$ 2 = từ có dấu cách

$ 3 =

$ 4 =

$ 2 = từ có dấu cách

$ 3 =

$ 4 =


Với lập luận của chúng tôi, cả hai $* $@ tạo ra một kết quả bốn từ:

các từ có dấu cách

"$ *" tạo ra kết quả một từ:

"các từ có khoảng trắng"

"$ @" tạo ra một kết quả gồm hai từ:

"từ" "từ có dấu cách"

phù hợp với mục đích thực tế của chúng tôi. Bài học rút ra từ điều này là mặc dù shell cung cấp bốn cách khác nhau để nhận danh sách các tham số vị trí, "$@"cho đến nay là hữu ích nhất cho hầu hết các tình huống, vì nó bảo toàn tính toàn vẹn của mỗi tham số vị trí.


Điện toán đám mây hệ điều hành hàng đầu tại OnWorks: