Tham số vị trí là gì?

Tham số vị trí là một đối số được chỉ định trên dòng lệnh, được sử dụng để khởi chạy quy trình hiện tại trong trình bao. Các giá trị tham số vị trí được lưu trữ trong một tập hợp các biến đặc biệt được duy trì bởi shell.

Các biến lưu trữ các tham số vị trí

Một ví dụ điển hình của shell sử dụng tham số vị trí là bash. Bạn có thể sử dụng bash trên Linux, BSD, macOS X và Windows 10.

Hãy xem xét lệnh bash sau đây. Tên lệnh là mycommand . Dòng lệnh có ba tham số: một, haiba bốn .

 mycommand một hai "ba bốn" 

Mẹo: Tham số vị trí được phân cách bằng khoảng trắng. Shell giải thích những thứ sau khoảng trắng dưới dạng các tham số riêng lẻ. Nếu chính tham số đó chứa một khoảng trắng, hãy đặt nó trong dấu ngoặc kép, như trong "ba bốn" ở trên.

Trong khi mycommand đang chạy, bash cung cấp cho nó các biến shell sau:

Tên biếnGiá trị
$ 0Lệnh của tôi
$ 1một
$ 2hai
$ 3ba bốn
$ #3
[email được bảo vệ]một hai ba bốn
$ *một hai ba bốn

Biến $ 0 được đặt thành từ đầu tiên của lệnh - tên lệnh. Biến này rất hữu ích vì các lệnh có thể được đổi tên hoặc được thực thi bằng liên kết tượng trưng. Một số chương trình hoạt động khác nhau tùy thuộc vào tên lệnh được sử dụng để chạy chương trình. $ 0 cho phép một chương trình xem tên lệnh nào đã khởi chạy nó.

Các biến $ 1, $ 2$ 3 chứa các giá trị của các tham số thứ nhất, thứ hai và thứ ba, tương ứng. Nếu có một tham số thứ tư, giá trị của nó sẽ được đặt trong biến $ 4 . Các thông số lớn hơn 9 có thể được truy cập bằng cách sử dụng dấu ngoặc nhọn quanh số; chẳng hạn, $ {10} sẽ là tham số thứ mười và $ {123} sẽ là tham số thứ 123.

Biến $ # chứa số lượng tham số vị trí, không bao gồm $ 0.

Biến [email được bảo vệ] chứa giá trị của tất cả các tham số vị trí, ngoại trừ $ 0.

Biến $ * giống như [email được bảo vệ], ngoại trừ khi nó được trích dẫn kép. Khi được đặt trong dấu ngoặc kép, $ * mở rộng thành $ 1c $ 2c $ 3c ... trong đó c là ký tự đầu tiên của $ IFS, biến phân tách trường bên trong của bash. IFS được sử dụng để phân tách từ và giá trị mặc định của nó là "khoảng trắng, tab hoặc dòng mới" - đây là nơi bash thấy phần cuối của một từ và phần đầu của từ tiếp theo.

Nếu giá trị của $ IFS là " _ " (dấu gạch dưới), "[email được bảo vệ]" sẽ mở rộng thành:

 một hai ba bốn 

Trong khi "$ *" mở rộng thành:

 một hai ba bốn 

Ví dụ

Dưới đây là một số ví dụ về việc sử dụng các tham số vị trí trong bash.

Sử dụng lệnh dựng sẵn, giá trị của [email được bảo vệ] có thể được sửa đổi cho trình bao hiện tại. Mọi thứ sau khi thiết lập - sẽ được đăng ký như một tham số vị trí.

 bộ - một hai "ba bốn" 

Bây giờ chúng ta có thể lặp lại các biến này bằng cách sử dụng cho ... trong :

 cho arg trong [email được bảo vệ]; làm tiếng vang "$ arg"; làm xong 
 một hai ba bốn 

Trong bash, [email được bảo vệ] là danh sách mặc định để lặp khi bạn chạy, vì vậy lệnh này cũng hoạt động:

 cho arg; làm tiếng vang "$ arg"; làm xong 
 một hai ba bốn 

Lặp lại trên "$ *" (có dấu ngoặc kép) sẽ cung cấp một chuỗi các tham số vị trí được nối, được nối với ký tự đầu tiên của $ IFS :

 IFS = ", "; cho arg trong "$ *"; làm tiếng vang "$ arg"; làm xong 
 một hai ba bốn 

Để biết thêm thông tin, hãy xem tài liệu của shell lệnh bash.

Thông số, thuật ngữ lập trình