Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Sử dụng các biến trong Bash

Trong khoa học máy tính (và máy tính thông thường), một biến là một vị trí trong bộ nhớ chứa thông tin tùy ý để sử dụng sau này. Nói cách khác, đó là vùng chứa lưu trữ tạm thời để bạn đưa dữ liệu vào và lấy dữ liệu ra. Trong Bash shell, dữ liệu đó có thể là một từ (một chuỗi , trong biệt ngữ máy tính) hoặc một số (một số nguyên ).

Bạn có thể chưa bao giờ (cố ý) sử dụng một biến trước đây trên máy tính của mình, nhưng có thể bạn đã sử dụng một biến trong các lĩnh vực khác của cuộc sống. Khi bạn nói những câu như "đưa cho tôi cái đó" hoặc "xem này", bạn đang sử dụng các biến ngữ pháp (bạn nghĩ chúng là đại từ ), bởi vì ý nghĩa của "cái này" và "cái kia" tùy thuộc vào bất kỳ điều gì bạn đang hình dung trong đầu hoặc bất kỳ điều gì bạn đang chỉ để khán giả biết bạn đang đề cập đến điều gì. Khi bạn làm toán, bạn sử dụng các biến để thay thế cho một giá trị không xác định, mặc dù bạn có thể không gọi nó là một biến.

Dưới đây là minh họa nhanh chóng và dễ dàng về biến Bash mà bạn có thể không nhận ra rằng mình sử dụng hàng ngày. PS1 biến chứa thông tin về cách bạn muốn lời nhắc đầu cuối của mình xuất hiện. Ví dụ:bạn có thể đặt nó thành một cái gì đó rất đơn giản — như dấu phần trăm (% ) —Bằng cách xác định lại PS1 biến:

 $ PS1 ="%" 
%

Bài viết này giải quyết các biến trong Bash shell chạy trên Linux, BSD, Mac hoặc Cygwin. Người dùng PowerShell nguồn mở của Microsoft nên tham khảo bài viết của tôi về các biến trong PowerShell.

Các biến là gì?

Bạn có cần các biến trong Bash hay không phụ thuộc vào những gì bạn làm trong một thiết bị đầu cuối. Đối với một số người dùng, các biến là một phương tiện thiết yếu để quản lý dữ liệu, trong khi đối với những người khác, chúng chỉ là những tiện ích nhỏ và tạm thời, còn đối với những người khác, chúng cũng có thể không tồn tại.

Cuối cùng, các biến là một công cụ. Bạn có thể sử dụng chúng khi thấy cần thiết hoặc để chúng một mình với sự thoải mái khi biết chúng được quản lý bởi Hệ điều hành của bạn. Tuy nhiên, kiến ​​thức là sức mạnh và việc hiểu cách các biến hoạt động trong Bash có thể đưa bạn đến tất cả các loại giải quyết vấn đề sáng tạo bất ngờ.

Cách đặt một biến

Bạn không cần các quyền đặc biệt để tạo một biến. Chúng được tự do sáng tạo, miễn phí sử dụng và nói chung là vô hại. Trong Bash shell (trên Linux và Mac), bạn có thể đặt chúng bằng cách xác định tên biến, sau đó đặt giá trị của nó. Ví dụ sau tạo một biến mới có tên là FOO và đặt giá trị thành chuỗi / home / seth / Documents :

 $ declare FOO="/home/seth/Documents" 

Thành công im lặng một cách kỳ lạ, vì vậy bạn có thể không cảm thấy tự tin rằng biến của bạn đã được thiết lập. Bạn có thể tự xem kết quả bằng lệnh echo , gọi lại biến của bạn bằng cách thêm vào trước nó một ký hiệu đô la ( $ ). Để đảm bảo rằng biến được đọc chính xác như bạn đã xác định, bạn cũng có thể đặt nó trong dấu ngoặc nhọn và dấu ngoặc kép. Việc làm này sẽ bảo toàn bất kỳ ký tự đặc biệt nào có thể xuất hiện trong biến; trong ví dụ này, điều đó không áp dụng, nhưng vẫn là một thói quen tốt cần hình thành:

 $ echo "$ {FOO}" 
/ home / seth / Documents

Việc thiết lập các biến có thể là một điều phổ biến đối với những người sử dụng shell thường xuyên, vì vậy quá trình này đã trở nên không chính thức. Khi một chuỗi được theo sau bởi một dấu bằng ( = ) và một giá trị, Bash lặng lẽ giả định rằng bạn đang đặt một biến, thực hiện khai báo từ khóa không cần thiết:

 $ FOO="/home/seth/Documents" 

Các biến thường được dùng để truyền tải thông tin từ hệ thống này sang hệ thống khác. Trong ví dụ đơn giản này, biến của bạn không hữu ích lắm, nhưng nó vẫn có thể truyền đạt thông tin. Ví dụ:vì nội dung của FOO biến là đường dẫn tệp, bạn có thể sử dụng biến làm lối tắt đến ~ / Documents thư mục:

 $ pwd 
/ home / seth
$ cd "$ {FOO}"
$ pwd
/ home / seth / Documents

Các biến có thể là bất kỳ chuỗi không dành riêng nào (cùng với số nguyên và dấu gạch dưới). Chúng không cần phải viết hoa, nhưng chúng thường được viết hoa để dễ dàng xác định là các biến.

Cách xóa một biến

Bạn có thể xóa một biến bằng nút không đặt lệnh:

 $ unset FOO 
$ echo $ FOO

Trong thực tế, hành động này thường không cần thiết. Các biến tương đối "rẻ", vì vậy bạn có thể tạo chúng và sau đó quên chúng khi bạn không cần nữa. Tuy nhiên, đôi khi bạn muốn đảm bảo một biến trống để tránh truyền tải thông tin không chính xác đến một quy trình khác có thể đọc biến đó.

Tạo một biến mới với tính năng bảo vệ khi va chạm

Đôi khi, bạn có thể có lý do để tin rằng một biến đã được thiết lập bởi bạn hoặc một quy trình. Nếu bạn không muốn ghi đè nó, thì có một cú pháp đặc biệt để đặt một biến thành giá trị hiện có của nó trừ khi giá trị hiện tại của nó trống.

Đối với ví dụ này, giả sử rằng FOO được đặt thành / home / seth / Documents :

 $ FOO =$ {FOO:- "bar"} 
$ echo $ FOO
/ home / seth / Documents

Dấu hai chấm :- ký hiệu nguyên nhân khai báo để mặc định thành một giá trị hiện có. Để xem quy trình này hoạt động theo cách khác, hãy xóa biến và thử lại:

 $ unset FOO 
$ echo $ FOO

$ FOO =$ {FOO:- "bar"}
$ echo $ FOO
thanh
>

Chuyển các biến cho một quy trình con

Khi bạn tạo một biến, bạn đang tạo cái được gọi là biến cục bộ . Điều này có nghĩa là biến được biết đến với shell hiện tại của bạn và chỉ shell hiện tại của bạn.

Thiết lập này là một giới hạn có chủ ý về phạm vi của một biến . Các biến, theo thiết kế, có xu hướng mặc định là chỉ khả dụng cục bộ, nhằm cố gắng duy trì việc chia sẻ thông tin trên cơ sở cần biết. Ví dụ:nếu bạn dại dột tạo một biến có chứa mật khẩu quan trọng ở dạng văn bản rõ ràng, thì thật tuyệt khi biết rằng hệ thống của bạn sẽ không cho phép trình bao từ xa hoặc daemon giả mạo (hoặc bất kỳ thứ gì khác bên ngoài một phiên đã tạo biến) truy cập mật khẩu đó .

Sử dụng ví dụ từ đầu bài viết này để thay đổi lời nhắc của bạn, nhưng sau đó khởi chạy một trình bao mới bên trong một trình bao hiện tại của bạn:

 $ PS1 ="%" 
% bash
$

Khi bạn khởi chạy một trình bao mới, giá trị mới của PS1 là lời nhắc mặc định thay vì lời nhắc mới của bạn:Một tiến trình con không kế thừa các biến được đặt trong cha của nó. Nếu bạn hủy quá trình con, bạn quay lại trình bao mẹ và bạn thấy PS1 tùy chỉnh của mình nhắc lại:

 $ thoát 
%

Nếu bạn muốn chuyển một biến cho một quy trình con, bạn có thể thêm trước lệnh có các định nghĩa thay đổi hoặc bạn có thể xuất biến đối với tiến trình con.

Biến ưu tiên

Bạn có thể thêm bất kỳ số lượng biến nào trước khi chạy lệnh. Việc quy trình con có sử dụng các biến hay không là tùy thuộc vào quy trình, nhưng bạn có thể chuyển các biến cho nó bất kể điều gì:

 $ FOO =123 bash 
$ echo $ FOO
123
$

Thêm trước có thể là một thủ thuật hữu ích khi bạn đang chạy một ứng dụng yêu cầu một vị trí đặc biệt cho các thư viện nhất định (sử dụng LD_LIBRARY_PATH biến) hoặc khi bạn đang biên dịch phần mềm bằng trình biên dịch không chuẩn (sử dụng CC biến), v.v.

Xuất biến

Một cách khác để cung cấp các biến cho quy trình con là xuất từ khóa, một lệnh được tích hợp trong Bash. Xuất khẩu lệnh mở rộng phạm vi của bất kỳ biến nào hoặc các biến nào bạn chỉ định:

 $ PS1 ="%" 
$ FOO =123
$ xuất PS1
$ xuất FOO
% bash
% echo $ PS1
%
% echo $ FOO
123

Trong cả hai trường hợp, nó không chỉ là một trình bao con có quyền truy cập vào một biến cục bộ được chuyển cho nó hoặc được xuất ra, mà còn là bất kỳ quy trình con nào của trình bao đó. Bạn có thể khởi chạy một ứng dụng từ cùng một trình bao và biến đó có sẵn dưới dạng một biến môi trường từ bên trong ứng dụng.

Các biến được xuất cho mọi thứ trên hệ thống của bạn để sử dụng được gọi là biến môi trường , đó là một chủ đề cho một bài báo trong tương lai. Trong thời gian chờ đợi, hãy thử sử dụng một số biến cho các công việc hàng ngày để xem chúng mang lại gì cho quy trình làm việc của bạn.