Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Thành thao thay thế biến lồng nhau và Biến Built-in BASH trong Linux – Hướng dẫn cuối cùng

Hai bài trước về BASH Shell thảo luận biến chi tiết được độc giả đánh giá cao. Chúng tôi Tecmint-Team rất mong cung cấp chủ đề mới nhất, cập nhật và liên quan chi tiết. Luôn cố gắng chạm đến các góc độ chính của chủ đề.

Đây là bài cuối về biến Linux, xem thay thế biến và biến định nghĩa sẵn trong Shell trước khi kết thúc chủ đề.

Bash thực hiện thay thế biến trước khi lệnh thực sự chạy. Linux Bash Shell tìm tất cả dấu '$' trước khi thực thi lệnh và thay bằng giá trị biến. Quá trình thay thế biến Bash chỉ diễn ra một lần. Làm sao nếu có biến lồng nhau?

Lưu ý: Biến lồng nhau nghĩa là biến khai báo bên trong biến. Xem kịch bản dưới đây.

Khai báo biến Read-Only và Executable:

admin@wsxdn.com:~$ declare -rx Linux_best_website="www.tecmint.com"

Kiểm tra giá trị biến:

admin@wsxdn.com:~$ printf "%s" "$Linux_best_website"
www.tecmint.com

Khai báo biến khác cũng Read-Only và Executable:

admin@wsxdn.com:~$ declare -rx Linux_website="Linux_best_website"

Bây giờ có 2 biến:

'Linux_best_website', giá trị "www.tecmint.com"
'Linux_website', giá trị "Linux_best_website"

Kết quả chạy lệnh một dòng dưới?

admin@wsxdn.com:~$ printf "%s" "$Linux_website"

Nên thay '$Linux_website' bằng "Linux_best_website" rồi "$Linux_best_website" lại là biến giá trị "www.tecmint.com". Kết quả cuối nên là:

admin@wsxdn.com:~$ printf "%s" "$Linux_website"
www.tecmint.com

Nhưng thực tế không phải, đầu ra là Linux_best_website.

Lý do? Bash thay thế giá trị biến chỉ một lần. Làm sao với script phức tạp cần thay thế biến thường xuyên và nhiều lần?

Đây là lúc lệnh 'eval' xuất hiện, thực hiện thay thế biến thêm lần trong script. Ví dụ làm rõ:

Khai báo biến x giá trị 10.

admin@wsxdn.com:~/Desktop$ declare x=10

Kiểm tra giá trị x:

admin@wsxdn.com:~/Desktop$ echo $yx
x10

Khai báo biến y giá trị x.

admin@wsxdn.com:~/Desktop$ declare y=x

Kiểm tra giá trị y:

admin@wsxdn.com:~/Desktop$ echo $y
x

Vấn đề BASH thay thế biến một lần, không thực hiện vòng thay thế thêm. Dùng 'eval' khắc phục.

admin@wsxdn.com:~/Desktop$ eval y=$x

Kiểm tra giá trị 'y':

admin@wsxdn.com:~/Desktop$ echo $y
10

Hurrah! Vấn đề giải quyết và 'eval' thắng cuộc :)

Không cần nói, 'eval' rất hữu ích trong script lớn và công cụ tiện lợi.

Phần cuối quan trọng không kém là biến BASH định nghĩa sẵn. Đừng hoảng nhìn danh sách dài. Không cần nhớ toàn bộ trước khi viết script trừ vài cái. Là một phần quá trình học, trình danh sách biến BASH định nghĩa sẵn.

STT BIẾN BASH KẾT QUẢ
1 auto_resume Hoàn thành lệnh cho job dừng.
2 BASH Đường dẫn shell.
3 BASH_ENV Hiển thị tên file profile.
4 BASH_VERSION Hiển thị phiên bản Bash.
5 BASH_VERSINFO Hiển thị thông tin phiên bản chi tiết.
6 BASH_VERSINFO[0] Số phiên bản chính (release).
7 BASH_VERSINFO[1] Số phiên bản phụ (version).
8 BASH_VERSINFO[2] Mức vá (patch level).
9 BASH_VERSINFO[3] Phiên bản build.
10 BASH_VERSINFO[4] Trạng thái release (ví dụ beta1).
11 BASH_VERSINFO[5] Giá trị MACHTYPE.
12 CDPATH Danh sách thư mục cách nhau bởi dấu hai chấm.
13 COLUMNS Số ký tự mỗi dòng trên Standard Output.
14 EUID User ID của user hiện tại.
15 FCEDIT Trình soạn thảo mặc định cho lệnh fc.
16 FUNCNAME Tên của hàm
17 GROUPS Nhóm mà user là thành viên.
18 HISTFILE File chứa lịch sử lệnh.
19 HOME Tên thư mục home của bạn.
20 LINES Số dòng ngang trên Standard Output.
21 MAIL Tên file kiểm tra thư đến.
22 OSTYPE Tên hệ điều hành.
23 OLDPWD Thư mục làm việc trước đó.
24 PWD Thư mục làm việc hiện tại.
25 RANDOM In số ngẫu nhiên.
26 SHELL Shell ưu tiên dùng.
27 TIMEFORMAT Định dạng cho lệnh time.
28 UID ID của user hiện tại.

Có danh sách lớn biến BASH định nghĩa sẵn. Đã cố gắng liệt kê thường dùng nhất.

Đó là tất cả. Sẽ quay lại bài thú vị khác. Cho đến lúc đó hãy theo dõi và kết nối TecMint. Đừng quên góp ý quý báu ở phần bình luận dưới.