Về cơ bản, bạn có thể sử dụng nó bất cứ lúc nào bạn muốn "tiêm" các biến môi trường được truyền vào tập lệnh shell (dưới dạng đối số) như thể chúng được đặt trong môi trường thông qua export
, nhưng không cần phải lưu chúng vĩnh viễn trong export
danh sách trước khi chạy lệnh .
LƯU Ý: Ngoài ra còn có dạng dài của công -k
tắc , set -o keyword
.
Thí dụ
$ cat cmd1.bash
#!/bin/bash
echo $VARCMD
Bây giờ nếu tôi set -k
:
$ set -k; ./cmd1.bash VARCMD="hi"; set +k
hi
Nhưng nếu tôi chỉ chạy đoạn script trên:
$ ./cmd1.bash
$
Xuất khẩu đang làm gì?
$ help export
...
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
...
Vì vậy, nếu chúng ta thêm export | grep VAR
vào kịch bản của mình như vậy:
$ cat cmd2.bash
#!/bin/bash
echo $VARCMD
export | grep VAR
Và chúng tôi đã chạy thử nghiệm trên của chúng tôi một lần nữa:
$ set -k; ./cmd2.bash VARCMD="hi"; set +k
hi
declare -x VARCMD="hi"
Nhưng không có set -k
:
$ ./cmd2.bash
$
Vì vậy, set -k
cho phép chúng tôi tạm thời xuất các biến số hàng loạt.
Một vi dụ khac
$ cat cmd3.bash
#!/bin/bash
echo $VARCMD1
echo $VARCMD2
export | grep VAR
Khi chúng tôi đặt nhiều biến, tất cả chúng đều được xuất:
$ set -k; ./cmd3.bash VARCMD1="hi" VARCMD2="bye"; set +k
hi
bye
declare -x VARCMD1="hi"
declare -x VARCMD2="bye"
Vì vậy, sau đó nó chỉ tiêm tất cả các biến môi trường?
Không -k
là làm một điều rất rõ ràng ở đây. Nó chỉ xuất các biến được đưa vào dòng lệnh khi lệnh được thực thi.
Thí dụ
Nói rằng tôi đặt biến này:
$ VARCMD1="hi"
Bây giờ khi chúng ta chạy cùng một lệnh bỏ qua VARCMD1="hi"
:
$ set -k; ./cmd3.bash VARCMD2="bye"; set +k
bye
declare -x VARCMD2="bye"
Nhưng tại sao điều này tồn tại?
Tôi tìm thấy nguồn này giải thích một chút về tính năng này, có tiêu đề: "Chuỗi phân công tham số từ khóa". LƯU Ý: URL nguồn sử dụng địa chỉ IP để tôi không thể liên kết trực tiếp với nó ở đây trên SE.
http://140.120.7.21/OpenSystem2/SoftwareTools/node16.html
Khi lập trình bằng bất kỳ ngôn ngữ nào, biến và giá trị của nó là rất quan trọng để viết mã đáng tin cậy. Bên cạnh các kiểu biến số nguyên và mảng, tất cả các biến shell khác chấp nhận các chuỗi làm giá trị của chúng. Khi nói về ngôn ngữ lập trình shell, để thống nhất, chúng tôi thích cụm từ "tham số từ khóa". Dưới đây là một vài điểm cần chú ý khi gán giá trị cho các tham số từ khóa:
Để tránh bất kỳ hiệu ứng không mong muốn nào, luôn đặt chuỗi con gán tham số trước chuỗi lệnh.
Trong shell B, các giá trị được gán của các tham số từ khóa sẽ được lưu trữ trong các biến shell (cục bộ). Trong bash và ksh, chuỗi gán tham số từ khóa trước lệnh sẽ không được lưu trong các biến shell. Chúng chỉ ảnh hưởng đến quá trình con ngay lập tức rẽ nhánh để thực thi lệnh hiện tại. Chỉ một dòng các chuỗi gán tham số từ khóa được lưu trữ trong các biến shell (cục bộ). Các chuỗi gán tham số từ khóa cũng có thể xuất hiện dưới dạng đối số cho các bí danh, khai báo, sắp chữ, xuất, chỉ đọc và các lệnh dựng sẵn cục bộ. [Phần 3,4 của Tài liệu tham khảo Bash]
Các chuỗi gán tham số từ khóa sẽ được coi là đối số cho lệnh được thực thi, nếu chúng được đặt sau tên lệnh.
- Các tham số từ khóa có thể được thao tác bằng lệnh set.
-k
cho phép chúng tôi chạy các kịch bản shell 30 năm tuổi mà không cần phải cấu trúc lại chúng. Thay vào đó, vượt qua các biến môi trường tạm thời bằng cách sử dụng cú pháp tiền tố:var1=x var2=y command ...