Lệnh sh - Linux - Lệnh Unix

TÊN

bash - GNU Bourne-Again SHell

TÓM TẮC

bash [tùy chọn] [tệp]

SỰ MIÊU TẢ

Bash là một trình thông dịch ngôn ngữ lệnh không tương thích thực hiện các lệnh đọc từ đầu vào tiêu chuẩn hoặc từ một tệp. Bash cũng kết hợp các tính năng hữu ích từ vỏ KornC ( kshcsh ).

Bash được dự định là một sự thực hiện phù hợp với đặc điểm kỹ thuật của công cụ Shell và POS POSIX (IEEE Working Group 1003.2).

TÙY CHỌN

Ngoài các tùy chọn shell đơn ký tự được mô tả trong phần mô tả của lệnh nội trang đã thiết lập , bash giải thích các tùy chọn sau đây khi nó được gọi:

-c Chuỗi

Nếu tùy chọn -c hiện diện, thì các lệnh được đọc từ chuỗi . Nếu có các đối số sau chuỗi , chúng được gán cho các tham số vị trí, bắt đầu bằng $ 0 .

-tôi

Nếu tùy chọn -i hiện diện, trình bao tương tác .

-l

Làm cho bash hoạt động như thể nó đã được gọi là một vỏ đăng nhập (xem INVOCATION bên dưới).

-r

Nếu tùy chọn -r là hiện tại, vỏ bị hạn chế (xem RESTRICTED SHELL bên dưới).

-S

Nếu tùy chọn -s là hiện tại, hoặc nếu không có đối số vẫn còn sau khi xử lý tùy chọn, sau đó lệnh được đọc từ đầu vào tiêu chuẩn. Tùy chọn này cho phép thiết lập các thông số vị trí khi gọi một trình bao tương tác.

-D

Một danh sách tất cả các chuỗi được trích dẫn kép trước bởi $ được in trên tiêu chuẩn ouput. Đây là các chuỗi phải tuân theo bản dịch ngôn ngữ khi ngôn ngữ hiện tại không phải là C hoặc POSIX . Điều này ngụ ý tùy chọn -n ; không có lệnh nào được thực thi.

[- +] O [ shopt_option ]

shopt_option là một trong các tùy chọn vỏ được chấp nhận bởi nội trang shopt (xem SHELL BUILTIN COMMANDS bên dưới). Nếu shopt_option hiện diện, -O đặt giá trị của tùy chọn đó; + O tắt nó. Nếu shopt_option không được cung cấp, tên và giá trị của các tùy chọn vỏ được chấp nhận bởi shopt được in trên đầu ra tiêu chuẩn. Nếu tùy chọn gọi là + O , đầu ra được hiển thị ở định dạng có thể được sử dụng lại làm đầu vào.

A - báo hiệu kết thúc các tùy chọn và vô hiệu hóa xử lý tùy chọn thêm. Bất kỳ đối số nào sau - được coi là tên tệp và đối số. Đối số - tương đương với - .

Bash cũng diễn giải một số tùy chọn đa ký tự. Các tùy chọn này phải xuất hiện trên dòng lệnh trước khi các tùy chọn ký tự đơn được nhận dạng.

--dump-po-strings

Tương đương với -D , nhưng đầu ra ở định dạng tệp GNU gettext po (đối tượng di động).

--dump-strings

Tương đương với -D .

--Cứu giúp

Hiển thị thông báo sử dụng trên đầu ra tiêu chuẩn và thoát thành công.

-tệp tập tin -init

--rcile tệp

Thực hiện các lệnh từ tệp thay vì tệp khởi tạo cá nhân chuẩn ~ / .bashrc nếu trình bao tương tác (xem INVOCATION bên dưới).

--đăng nhập

Tương đương với -l .

--noediting

Không sử dụng thư viện readline GNU để đọc dòng lệnh khi trình bao tương tác.

--không có hồ sơ

Không đọc tệp khởi động toàn bộ hệ thống / etc / profile hoặc bất kỳ tệp khởi tạo cá nhân nào ~ / .bash_profile , ~ / .bash_login hoặc ~ / .profile . Theo mặc định, bash đọc những tệp này khi nó được gọi là một vỏ đăng nhập (xem INVOCATION bên dưới).

--norc

Không đọc và thực thi tệp khởi tạo cá nhân ~ / .bashrc nếu trình bao tương tác. Tùy chọn này được bật theo mặc định nếu trình bao được gọi là sh .

--posix

Thay đổi hành vi của bash nơi hoạt động mặc định khác với tiêu chuẩn POSIX 1003.2 để phù hợp với tiêu chuẩn ( chế độ posix ).

- không hạn chế

Vỏ bị hạn chế (xem SHSTRICTED SHELL bên dưới).

--rpm-require

Tạo danh sách các tệp được yêu cầu cho tập lệnh shell để chạy. Điều này ngụ ý '-n' và chịu sự hạn chế tương tự như kiểm tra lỗi thời gian biên dịch; Backticks, [] tests, và evals không được phân tích cú pháp để một số phụ thuộc có thể bị bỏ qua. --verbose Tương đương với v .

--phiên bản

Hiển thị thông tin phiên bản cho trường hợp bash này trên đầu ra tiêu chuẩn và thoát thành công.

LẬP LUẬN

Nếu các đối số vẫn còn sau khi xử lý tùy chọn, và không phải tùy chọn -c cũng không phải -s được cung cấp, đối số đầu tiên được giả định là tên của một tệp chứa các lệnh shell. Nếu bash được gọi trong kiểu này, $ 0 được đặt thành tên của tệp và các tham số vị trí được đặt cho các đối số còn lại. Bash đọc và thực hiện các lệnh từ tệp này, sau đó thoát. Trạng thái thoát của Bash là trạng thái thoát của lệnh cuối cùng được thực hiện trong kịch bản lệnh. Nếu không có lệnh nào được thực hiện, trạng thái thoát là 0. Một lần thử đầu tiên được thực hiện để mở tệp trong thư mục hiện tại, và nếu không tìm thấy tệp, thì trình vỏ tìm kiếm các thư mục trong PATH cho tập lệnh.

INVOCATION

Một shell đăng nhập là một trong những ký tự đầu tiên của đối số bằng không là một - hoặc bắt đầu với tùy chọn --login .

Một shell tương tác là một cái bắt đầu mà không có đối số không tùy chọn và không có tùy chọn -c có đầu vào và đầu ra tiêu chuẩn đều được kết nối với các đầu cuối (được xác định bằng đẳng thức (3)) hoặc bắt đầu bằng tùy chọn -i . PS1 được đặt và $ - bao gồm i nếu bash tương tác, cho phép một tập lệnh shell hoặc một tệp khởi động để kiểm tra trạng thái này.

Các đoạn sau mô tả cách bash thực hiện các tệp khởi động của nó. Nếu bất kỳ tệp nào tồn tại nhưng không thể đọc được, hãy bash báo cáo lỗi. Dấu ngã được mở rộng trong tên tệp như được mô tả bên dưới trong Mở rộng Tilde trong phần MỞ RỘNG .

Khi bash được gọi là một shell đăng nhập tương tác, hoặc là một shell không tương tác với tùy chọn --login , nó đầu tiên đọc và thực hiện các lệnh từ tập tin / etc / profile , nếu tập tin đó tồn tại. Sau khi đọc tệp đó, nó tìm kiếm ~ / .bash_profile , ~ / .bash_login~ / .profile , theo thứ tự đó, và đọc và thực hiện các lệnh từ lệnh đầu tiên tồn tại và có thể đọc được. Tùy chọn --noprofile có thể được sử dụng khi trình bao bắt đầu ngăn chặn hành vi này.

Khi một shell đăng nhập thoát, bash đọc và thực thi các lệnh từ tập tin ~ / .bash_logout , nếu nó tồn tại.

Khi một shell tương tác không phải là một shell đăng nhập được khởi động, bash đọc và thực hiện các lệnh từ ~ / .bashrc , nếu tập tin đó tồn tại. Điều này có thể bị ức chế bằng cách sử dụng tùy chọn --norc . Tùy chọn tệp --rcfile sẽ buộc bash để đọc và thực hiện các lệnh từ tệp thay vì ~ / .bashrc .

Khi bash được bắt đầu không tương tác, để chạy tập lệnh shell, ví dụ, nó tìm biến BASH_ENV trong môi trường, mở rộng giá trị của nó nếu nó xuất hiện ở đó và sử dụng giá trị được mở rộng làm tên của tệp để đọc và thực thi . Bash hoạt động như thể lệnh sau đã được thực thi:

nếu [-n "$ BASH_ENV"]; sau đó . "$ BASH_ENV"; fi

nhưng giá trị của biến PATH không được sử dụng để tìm kiếm tên tệp.

Nếu bash được gọi với tên sh , nó cố gắng bắt chước hành vi khởi động của các phiên bản lịch sử của sh càng chặt chẽ càng tốt, trong khi vẫn tuân theo tiêu chuẩn POSIX. Khi được gọi là một shell đăng nhập tương tác, hoặc một shell không tương tác với tùy chọn --login , nó đầu tiên cố gắng đọc và thực hiện các lệnh từ / etc / profile~ / .profile , theo thứ tự đó. Tùy chọn --noprofile có thể được sử dụng để ngăn chặn hành vi này. Khi được gọi là một trình bao tương tác với tên sh , bash tìm biến ENV , mở rộng giá trị của nó nếu nó được định nghĩa và sử dụng giá trị mở rộng làm tên của một tệp để đọc và thực thi. Vì một shell được gọi là sh không cố đọc và thực hiện các lệnh từ bất kỳ tệp khởi động nào khác, tùy chọn --rcfile không có hiệu lực. Một hệ vỏ không tương tác được gọi với tên sh không cố đọc bất kỳ tệp khởi động nào khác. Khi được gọi là sh , bash sẽ chuyển sang chế độ posix sau khi các tập tin khởi động được đọc.

Khi bash được bắt đầu ở chế độ posix , giống như tùy chọn dòng lệnh --posix , nó tuân theo chuẩn POSIX cho các tệp khởi động. Trong chế độ này, các trình bao tương tác mở rộng biến ENV và các lệnh được đọc và thực hiện từ tệp có tên là giá trị được mở rộng. Không có tệp khởi động nào khác được đọc.

Bash cố gắng xác định khi nào nó được chạy bởi trình bao da từ xa, thường là rshd . Nếu bash xác định nó đang được chạy bởi rshd , nó đọc và thực hiện các lệnh từ ~ / .bashrc , nếu tập tin đó tồn tại và có thể đọc được. Nó sẽ không làm điều này nếu được gọi là sh . Tùy chọn --norc có thể được sử dụng để ngăn chặn hành vi này và tùy chọn --rcfile có thể được sử dụng để buộc một tệp khác được đọc, nhưng rshd thường không gọi trình bao với các tùy chọn đó hoặc cho phép chúng được chỉ định.

Nếu trình bao được bắt đầu với id người dùng (nhóm) hiệu quả không bằng id người dùng thực (nhóm), và tùy chọn -p không được cung cấp, thì không có tệp khởi động nào được đọc, các hàm vỏ không được thừa hưởng từ môi trường, SHELLOPTS biến, nếu nó xuất hiện trong môi trường, bị bỏ qua, và id người dùng có hiệu lực được đặt thành id người dùng thực. Nếu tùy chọn -p được cung cấp tại lời gọi, hành vi khởi động giống nhau, nhưng id người dùng hiệu quả không được đặt lại.

CÁC ĐỊNH NGHĨA

Các định nghĩa sau được sử dụng trong phần còn lại của tài liệu này.

chỗ trống

Một không gian hoặc tab.

từ

Một chuỗi các ký tự được coi là một đơn vị duy nhất của trình bao. Còn được gọi là mã thông báo .

Tên

Một từ chỉ bao gồm các ký tự chữ và số và dấu gạch dưới, và bắt đầu bằng một ký tự chữ cái hoặc dấu gạch dưới. Còn được gọi là số nhận dạng .

metacharacter

Một ký tự, khi không được phép, phân tách các từ. Một trong những điều sau đây:

| &; () <> tab không gian

-toán tử điều khiển

thông báo thực hiện chức năng điều khiển. Nó là một trong những biểu tượng sau:

|| & &&; ;; () |

TỪ DÀNH RIÊNG

Các từ dành riêng là các từ có ý nghĩa đặc biệt đối với trình bao. Các từ sau được nhận dạng là được đặt trước khi không được trích dẫn và hoặc là từ đầu tiên của một lệnh đơn giản (xem SHELL GRAMMAR bên dưới) hoặc từ thứ ba của một trường hợp hoặc cho lệnh:

! trường hợp làm elif khác esac fi cho chức năng nếu trong chọn sau đó cho đến khi trong thời gian {} [[]]

SHELL GRAMMAR

Lệnh đơn giản

Một lệnh đơn giản là một chuỗi các phép gán biến tùy chọn, theo sau là các từ và chuyển hướng trống và được kết thúc bởi một toán tử điều khiển . Từ đầu tiên chỉ định lệnh được thực hiện và được chuyển thành đối số bằng không. Các từ còn lại được chuyển làm đối số cho lệnh được gọi.

Giá trị trả về của một lệnh đơn giản là trạng thái thoát của nó, hoặc 128+ n nếu lệnh được kết thúc bằng tín hiệu n .

Đường ống

Đường ống là một chuỗi gồm một hoặc nhiều lệnh được phân cách bởi ký tự | . Định dạng cho một đường ống là:

[ thời gian [ -p ]] [! ] lệnh [ | command2 ...]

Đầu ra tiêu chuẩn của lệnh được kết nối thông qua một đường ống đến đầu vào tiêu chuẩn của lệnh2 . Kết nối này được thực hiện trước bất kỳ chuyển hướng nào được chỉ định bởi lệnh (xem phần REDIRECTION bên dưới).

Nếu từ dành riêng ! trước một đường ống, trạng thái thoát của đường ống đó là NOT hợp lý của trạng thái thoát của lệnh cuối cùng. Nếu không, trạng thái của đường dẫn là trạng thái thoát của lệnh cuối cùng. Shell đợi tất cả các lệnh trong đường ống để kết thúc trước khi trả về một giá trị.

Nếu từ dành riêng cho thời gian trước một đường ống, thời gian trôi qua cũng như thời gian của người dùng và hệ thống được tiêu thụ bởi việc thực hiện của nó được báo cáo khi đường ống chấm dứt. Tùy chọn -p thay đổi định dạng đầu ra thành định dạng được chỉ định bởi POSIX. Biến TIMEFORMAT có thể được đặt thành một chuỗi định dạng chỉ định cách hiển thị thông tin thời gian; xem mô tả về TIMEFORMAT trong Shell Variables bên dưới.

Mỗi lệnh trong một đường ống được thực hiện như một quá trình riêng biệt (ví dụ, trong một vỏ bọc con).

Danh sách

Một danh sách là một chuỗi của một hoặc nhiều đường ống được phân tách bởi một trong các toán tử ; , & , && , hoặc || và tùy ý chấm dứt bởi một trong các ; , & , hoặc .

Trong số các toán tử danh sách này, &&|| có quyền ưu tiên bằng nhau, tiếp theo là ;&, có quyền ưu tiên ngang nhau.

Một chuỗi một hoặc nhiều dòng mới có thể xuất hiện trong danh sách thay vì dấu chấm phẩy để phân tách các lệnh.

Nếu một lệnh được kết thúc bởi toán tử điều khiển & , trình bao thực hiện lệnh trong nền trong một vỏ con. Shell không chờ lệnh kết thúc, và trạng thái trả về là 0. Lệnh được phân cách bởi a ; được thực thi tuần tự; vỏ chờ đợi cho mỗi lệnh để chấm dứt lần lượt. Trạng thái trả về là trạng thái thoát của lệnh cuối cùng được thực hiện.

Các toán tử kiểm soát &&|| biểu thị VÀ danh sách và danh sách OR, tương ứng. Danh sách AND có biểu mẫu

command1 && command2

command2 được thực hiện nếu, và chỉ khi, command1 trả về trạng thái thoát của số không.

Danh sách OR có biểu mẫu

command1 || command2

command2 được thực thi nếu và chỉ khi command1 trả về một trạng thái thoát khác không. Trạng thái trả về của danh sách AND và OR là trạng thái thoát của lệnh cuối cùng được thực hiện trong danh sách.

Các lệnh hợp chất

Lệnh ghép là một trong các lệnh sau:

( danh sách )

danh sách được thực hiện trong một subshell. Các phép gán biến và các lệnh nội trang có ảnh hưởng đến môi trường của trình bao không còn hiệu lực sau khi lệnh hoàn tất. Trạng thái trả về là trạng thái thoát của danh sách .

{ list ; }

danh sách được thực hiện đơn giản trong môi trường shell hiện tại. danh sách phải được chấm dứt bằng một dòng mới hoặc dấu chấm phẩy. Điều này được gọi là lệnh nhóm . Trạng thái trả về là trạng thái thoát của danh sách . Lưu ý rằng không giống như các siêu ký tự () , {} là các từ dành riêng và phải xảy ra khi một từ dành riêng được phép nhận ra. Vì chúng không gây ra ngắt lời, chúng phải được tách ra khỏi danh sách bằng khoảng trắng.

(( biểu thức ))

Biểu thức được đánh giá theo các quy tắc được mô tả dưới đây theo ĐÁNH GIÁ ARITHMETIC . Nếu giá trị của biểu thức khác 0, trạng thái trả về là 0; nếu không trạng thái trả về là 1. Điều này là chính xác tương đương với " biểu thức ".

[[ biểu thức ]]

Trả về trạng thái 0 hoặc 1 tùy thuộc vào việc đánh giá biểu thức biểu thức có điều kiện. Các biểu thức bao gồm các bộ sơ khai được mô tả dưới đây dưới các BIỂU ĐỒ ĐIỀU KIỆN . Việc chia tách từ và mở rộng tên đường dẫn không được thực hiện trên các từ giữa [[]] ; mở rộng dấu ngã, tham số và mở rộng biến, mở rộng số học, thay thế lệnh, thay thế tiến trình và loại bỏ trích dẫn được thực hiện.

Khi các toán tử ==! = Được sử dụng, chuỗi ở bên phải toán tử được coi là một mẫu và được so khớp theo các quy tắc được mô tả bên dưới trong So khớp mẫu . Giá trị trả về là 0 nếu chuỗi khớp hoặc không khớp với mẫu, tương ứng và 1 giá trị khác. Bất kỳ phần nào của mẫu có thể được trích dẫn để buộc nó được khớp như một chuỗi.

Biểu thức có thể được kết hợp bằng cách sử dụng các toán tử sau, được liệt kê theo thứ tự giảm dần ưu tiên:

( biểu thức )

Trả về giá trị của biểu thức . Điều này có thể được sử dụng để ghi đè quyền ưu tiên bình thường của các toán tử.

! biểu hiện

Đúng nếu biểu thức là sai.

expression1 && expression2

Đúng nếu cả expression1expression2 đều đúng.

expression1 || expression2 Đúng nếu một trong hai expression1 hoặc expression2 là true.

The &&|| các toán tử không đánh giá expression2 nếu giá trị của expression1 là đủ để xác định giá trị trả về của toàn bộ biểu thức điều kiện.

cho tên [ bằng chữ ]; làm danh sách ; làm xong

Danh sách các từ sau được mở rộng, tạo danh sách các mục. Tên biến được đặt thành từng phần tử của danh sách này lần lượt và danh sách được thực thi mỗi lần. Nếu từ trong bị bỏ qua, lệnh for sẽ thi hành danh sách một lần cho mỗi tham số vị trí được đặt (xem PARAMETERS bên dưới). Trạng thái trả về là trạng thái thoát của lệnh cuối cùng thực hiện. Nếu việc mở rộng các mục sau trong các kết quả trong một danh sách trống, không có lệnh nào được thực hiện và trạng thái trả về là 0.

cho (( expr1 ; expr2 ; expr3 )); làm danh sách ; làm xong

Đầu tiên, biểu thức số học expr1 được đánh giá theo các quy tắc được mô tả dưới đây theo ĐÁNH GIÁ ARITHMETIC . Biểu thức số học expr2 sau đó được đánh giá liên tục cho đến khi nó đánh giá bằng không. Mỗi lần expr2 đánh giá thành giá trị khác 0, danh sách được thực thi và biểu thức số học expr3 được đánh giá. Nếu bất kỳ biểu thức nào bị bỏ qua, nó hoạt động như thể nó đánh giá 1. Giá trị trả về là trạng thái thoát của lệnh cuối cùng trong danh sách được thực thi hoặc false nếu bất kỳ biểu thức nào không hợp lệ.

chọn tên [ bằng chữ ]; làm danh sách ; làm xong

Danh sách các từ sau được mở rộng, tạo danh sách các mục. Tập hợp các từ được mở rộng được in trên lỗi tiêu chuẩn, mỗi từ đứng trước một số. Nếu từ trong bị bỏ qua, các tham số vị trí được in (xem PARAMETERS bên dưới). Dấu nhắc PS3 sau đó được hiển thị và một dòng được đọc từ đầu vào tiêu chuẩn. Nếu dòng bao gồm một số tương ứng với một trong các từ được hiển thị, thì giá trị của tên được đặt thành từ đó. Nếu dòng trống, các từ và lời nhắc sẽ hiển thị lại. Nếu EOF được đọc, lệnh hoàn thành. Bất kỳ giá trị nào khác đọc đều khiến tên được đặt thành null. Dòng đọc được lưu trong biến REPLY . Danh sách được thực hiện sau mỗi lần lựa chọn cho đến khi một lệnh ngắt được thực hiện. Trạng thái thoát của lựa chọn là trạng thái thoát của lệnh cuối cùng được thực hiện trong danh sách , hoặc số không nếu không có lệnh nào được thực hiện.

từ trường hợp trong [[(] mẫu [ | mẫu ]

Lệnh trường hợp đầu tiên mở rộng từ và cố gắng đối sánh từ đó với mỗi mẫu lần lượt, sử dụng cùng các quy tắc phù hợp để mở rộng tên đường dẫn (xem Mở rộng tên đường dẫn bên dưới). Khi tìm thấy một kết quả phù hợp, danh sách tương ứng được thực thi. Sau trận đấu đầu tiên, không có trận đấu nào tiếp theo được thử. Trạng thái thoát là không nếu không có mẫu nào phù hợp. Nếu không, đó là trạng thái thoát của lệnh cuối cùng được thực hiện trong danh sách .

nếu danh sách ; sau đó liệt kê; [ danh sách elif ; sau đó liệt kê ; ] ... [ danh sách khác ; ] fi

Danh sách nếu được thực hiện. Nếu trạng thái thoát của nó là 0, danh sách sau đó được thực hiện. Nếu không, mỗi danh sách elif được thực hiện lần lượt, và nếu trạng thái thoát của nó bằng 0, danh sách tương ứng sau đó được thực hiện và lệnh hoàn tất. Nếu không, danh sách khác được thực hiện, nếu có. Trạng thái thoát là trạng thái thoát của lệnh cuối cùng được thực thi hoặc không nếu không có điều kiện nào được kiểm tra đúng.

trong khi danh sách ; làm danh sách ; làm xong

cho đến khi danh sách ; làm danh sách ; làm xong

Lệnh while liên tục thực thi danh sách do miễn là lệnh cuối cùng trong danh sách trả về trạng thái thoát của số không. Lệnh cho đến giống với lệnh while , ngoại trừ việc kiểm thử bị loại bỏ; danh sách do được thực hiện miễn là lệnh cuối cùng trong danh sách trả về trạng thái thoát khác không. Trạng thái thoát của một khoảng thời giancho đến khi các lệnh là trạng thái thoát của lệnh danh sách do làm cuối cùng được thực hiện, hoặc 0 nếu không có lệnh nào được thực hiện.

[ function ] name () { list ; }

Điều này định nghĩa một hàm có tên là name . Phần thân của hàm là danh sách các lệnh giữa {và}. Danh sách này được thực hiện bất cứ khi nào tên được chỉ định làm tên của một lệnh đơn giản. Trạng thái thoát của một hàm là trạng thái thoát của lệnh cuối cùng được thực hiện trong phần thân. (Xem CHỨC NĂNG bên dưới.)

BÌNH LUẬN

Trong một shell không tương tác, hoặc một shell tương tác trong đó tùy chọn interactive_comments cho nội trang shopt được kích hoạt (xem SHELL BUILTIN COMMANDS bên dưới), một từ bắt đầu bằng # khiến từ đó và tất cả các ký tự còn lại trên dòng đó bị bỏ qua. Một trình bao tương tác không bật tùy chọn interactive_comments không cho phép nhận xét. Tùy chọn interactive_comments được bật theo mặc định trong các trình tương tác.

QUOTING

Trích dẫn được sử dụng để loại bỏ ý nghĩa đặc biệt của các ký tự hoặc từ nhất định đối với trình bao. Trích dẫn có thể được sử dụng để vô hiệu hóa điều trị đặc biệt cho các ký tự đặc biệt, để ngăn chặn các từ dành riêng được nhận dạng như vậy, và để ngăn chặn việc mở rộng tham số.

Mỗi siêu ký tự được liệt kê ở trên theo DEFINITIONS có ý nghĩa đặc biệt đối với trình bao và phải được trích dẫn nếu nó đại diện cho chính nó.

Khi các tiện ích mở rộng lịch sử lệnh đang được sử dụng, ký tự mở rộng lịch sử , thường là ! , phải được trích dẫn để ngăn chặn việc mở rộng lịch sử.

Có ba cơ chế trích dẫn: ký tự thoát , dấu nháy đơn và dấu ngoặc kép.

Dấu gạch chéo ngược không được trích dẫn ( \ ) là ký tự thoát . Nó giữ nguyên giá trị chữ của ký tự tiếp theo sau, ngoại trừ . Nếu một cặp \ xuất hiện, và dấu gạch chéo ngược không được trích dẫn, \ được coi là tiếp tục dòng (nghĩa là, nó được loại bỏ khỏi luồng đầu vào và bỏ qua hiệu quả).

Việc bao gồm các ký tự trong dấu nháy đơn duy trì giá trị chữ của mỗi ký tự trong dấu ngoặc kép. Một trích dẫn duy nhất có thể không xảy ra giữa các dấu nháy đơn, ngay cả khi trước dấu gạch chéo ngược.

Việc bao gồm các ký tự trong dấu ngoặc kép giữ nguyên giá trị bằng chữ của tất cả các ký tự trong dấu ngoặc kép, ngoại trừ $ , `\ . Ký tự $` giữ lại ý nghĩa đặc biệt của chúng trong dấu ngoặc kép. Dấu gạch chéo ngược chỉ giữ lại ý nghĩa đặc biệt của nó khi được theo sau bởi một trong các ký tự sau: $ , ` , " , \ , hoặc .

Các tham số đặc biệt *@ có ý nghĩa đặc biệt khi trong dấu ngoặc kép (xem PARAMETERS bên dưới).

Các từ có dạng $ ' string ' được xử lý đặc biệt. Từ này mở rộng thành chuỗi , với các ký tự dấu gạch chéo ngược được thay thế bằng tiêu chuẩn ANSI C. Chuỗi thoát dấu gạch chéo ngược, nếu có, được giải mã như sau:

\ a

cảnh báo (chuông)

\ b

backspace

\ e

một nhân vật thoát

\ f

thức ăn dạng

\ n

dòng mới

\ r

vận chuyển trở lại

\ t

Tab ngang

\ v

tab dọc

\\

dấu gạch chéo ngược

\ '

trích dẫn đơn

\ nnn

ký tự tám bit có giá trị là giá trị bát phân nnn (một đến ba chữ số)

\ x HH

ký tự tám bit có giá trị là giá trị thập lục phân HH (một hoặc hai chữ số hex)

\ c x

ký tự control- x

Kết quả mở rộng được trích dẫn một lần, như thể không có dấu đô la.

Một chuỗi được trích dẫn kép được bắt đầu bằng dấu đô la ( $ ) sẽ làm cho chuỗi được dịch theo ngôn ngữ hiện tại. Nếu ngôn ngữ hiện tại là C hoặc POSIX , dấu đô la bị bỏ qua. Nếu chuỗi được dịch và thay thế, thay thế được trích dẫn kép.

THÔNG SỐ

Tham số là một thực thể lưu trữ các giá trị. Nó có thể là tên , số, hoặc một trong các ký tự đặc biệt được liệt kê bên dưới trong Tham số Đặc biệt . Đối với các mục đích của trình bao, một biến là một tham số được biểu thị bằng một tên . Biến có giá trị và không hoặc nhiều thuộc tính . Các thuộc tính được gán bằng cách sử dụng lệnh nội trang khai báo (xem khai báo bên dưới trong SHELL BUILTIN COMMANDS ).

Một tham số được đặt nếu nó được gán một giá trị. Chuỗi rỗng là một giá trị hợp lệ. Khi một biến được thiết lập, nó có thể không được thiết lập chỉ bằng cách sử dụng lệnh setin unset (xem SHELL BUILTIN COMMANDS bên dưới).

Một biến có thể được gán bởi một câu lệnh của biểu mẫu

name = [ value ]

Nếu giá trị không được đưa ra, biến được gán chuỗi rỗng. Tất cả các giá trị trải qua việc mở rộng dấu ngã, tham số và mở rộng biến, thay thế lệnh, mở rộng số học và xóa trích dẫn (xem phần Mở rộng bên dưới). Nếu biến có thuộc tính số nguyên được đặt, thì giá trị sẽ được mở rộng số học ngay cả khi mở rộng $ ((...)) không được sử dụng (xem phần Mở rộng số học bên dưới). Việc tách từ không được thực hiện, ngoại trừ "$ @" như được giải thích bên dưới trong Tham số Đặc biệt . Mở rộng tên đường dẫn không được thực hiện. Các câu lệnh gán cũng có thể xuất hiện dưới dạng đối số cho các lệnh nội trang khai báo , sắp xếp , xuất , readonlycục bộ .

Tham số vị trí

Tham số vị trí là tham số được biểu thị bằng một hoặc nhiều chữ số, khác với chữ số đơn 0. Các tham số vị trí được gán từ đối số của trình bao khi nó được gọi và có thể được gán lại bằng cách sử dụng lệnh dựng sẵn đã đặt . Các tham số vị trí có thể không được gán cho các câu lệnh gán. Các tham số vị trí tạm thời được thay thế khi một hàm hệ vỏ được thực hiện (xem các hàm CHỨC NĂNG bên dưới).

Khi một tham số vị trí bao gồm nhiều hơn một chữ số được mở rộng, nó phải được đặt trong niềng răng (xem phần Mở rộng bên dưới).

Thông số đặc biệt

Shell xử lý một số tham số đặc biệt. Các thông số này chỉ có thể được tham chiếu; giao cho họ không được phép.

*

Mở rộng đến các tham số vị trí, bắt đầu từ một tham số. Khi mở rộng xảy ra trong dấu nháy kép, nó mở rộng thành một từ duy nhất với giá trị của mỗi thông số được phân cách bằng ký tự đầu tiên của biến đặc biệt IFS . Tức là, " $ * " tương đương với " $ 1 c $ 2 c ... ", trong đó c là ký tự đầu tiên của giá trị của biến IFS . Nếu IFS không được đặt, các tham số được phân cách bằng dấu cách. Nếu IFS là null, các tham số được nối mà không có dấu phân cách xen kẽ.

@

Mở rộng đến các tham số vị trí, bắt đầu từ một tham số. Khi mở rộng xảy ra trong dấu ngoặc kép, mỗi tham số sẽ mở rộng thành một từ riêng biệt. Tức là, " $ @ " tương đương với " $ 1 " " $ 2 " ... Khi không có tham số vị trí, " $ @ " và $ @ mở rộng thành không có gì (nghĩa là, chúng bị xóa).

#

Mở rộng đến số tham số vị trí theo số thập phân.

?

Mở rộng đến trạng thái của đường dẫn nền trước được thực thi gần đây nhất.

- -

Mở rộng đến các cờ tùy chọn hiện tại như được chỉ định khi yêu cầu, bởi lệnh nội trang đã thiết lập hoặc các cờ được thiết lập bởi chính vỏ đó (chẳng hạn như tùy chọn -i ).

$

Mở rộng đến ID tiến trình của trình bao. Trong một () subshell, nó mở rộng đến ID tiến trình của shell hiện tại, không phải là subshell.

!

Mở rộng đến ID tiến trình của lệnh được thực thi gần đây nhất (không đồng bộ).

0

Mở rộng đến tên của shell hoặc shell script. Điều này được thiết lập lúc khởi tạo trình bao. Nếu bash được gọi với một tập lệnh, $ 0 được đặt thành tên của tập tin đó. Nếu bash được bắt đầu bằng tùy chọn -c , thì $ 0 được đặt thành đối số đầu tiên sau khi chuỗi được thực thi, nếu có một chuỗi. Nếu không, nó được đặt thành tên tệp được sử dụng để gọi bash , như được đưa ra bởi đối số bằng không.

_

Khi khởi động trình bao, được đặt thành tên tệp tuyệt đối của shell hoặc shell script đang được thực thi như được truyền trong danh sách đối số. Sau đó, mở rộng đến đối số cuối cùng cho lệnh trước đó, sau khi mở rộng. Cũng đặt tên đầy đủ của mỗi lệnh được thực hiện và được đặt trong môi trường được xuất ra lệnh đó. Khi kiểm tra thư, tham số này giữ tên của tệp thư hiện đang được kiểm tra.

Shell biến

Các biến sau được đặt bởi trình bao:

BASH

Mở rộng đến tên tệp đầy đủ được sử dụng để gọi trường hợp bash này .

BASH_VERSINFO

Biến mảng chỉ đọc có thành viên chứa thông tin phiên bản cho trường hợp bash này . Các giá trị được gán cho các thành viên mảng như sau:

BASH_VERSINFO [ 0]

Số phiên bản chính ( bản phát hành ).

BASH_VERSINFO [ 1]

Số phiên bản phụ ( phiên bản ).

BASH_VERSINFO [ 2]

Mức bản vá.

BASH_VERSINFO [ 3]

Phiên bản xây dựng.

BASH_VERSINFO [ 4]

Trạng thái phát hành (ví dụ: beta1 ).

BASH_VERSINFO [ 5]

Giá trị của MACHTYPE .

BASH_VERSION

Mở rộng đến một chuỗi mô tả phiên bản của thể hiện bash này .

COMP_CWORD

COMP_LINE

Dòng lệnh hiện tại. Biến này chỉ có sẵn trong các hàm shell và các lệnh bên ngoài được gọi bởi các cơ sở hoàn thành có thể lập trình (xem phần Hoàn thành lập trình bên dưới).

COMP_POINT

COMP_WORDS

Một biến mảng (xem Mảng dưới đây) bao gồm các từ riêng lẻ trong dòng lệnh hiện tại. Biến này chỉ có sẵn trong các hàm shell được gọi bởi các cơ sở hoàn thành lập trình (xem phần Hoàn thành lập trình bên dưới).

DIRSTACK

Một biến mảng (xem Mảng dưới đây) có chứa các nội dung hiện tại của ngăn xếp thư mục. Thư mục xuất hiện trong ngăn xếp theo thứ tự chúng được hiển thị bởi nội trang dir. Việc gán cho các thành viên của biến mảng này có thể được sử dụng để sửa đổi các thư mục đã có trong ngăn xếp, nhưng các nội trang dựng sẵn pushdpopd phải được sử dụng để thêm và xóa các thư mục. Việc gán cho biến này sẽ không thay đổi thư mục hiện tại. Nếu DIRSTACK không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

EUID

Mở rộng đến ID người dùng hiệu quả của người dùng hiện tại, được khởi tạo lúc khởi động trình bao. Biến này là chỉ đọc.

FUNCNAME

Tên của bất kỳ hàm shell hiện đang thi hành nào. Biến này chỉ tồn tại khi một hàm hệ vỏ đang thi hành. Bài tập cho FUNCNAME không có hiệu lực và trả lại trạng thái lỗi. Nếu FUNCNAME không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

CÁC NHÓM

Một biến mảng chứa danh sách các nhóm trong đó người dùng hiện tại là một thành viên. Các bài tập cho GROUPS không có hiệu lực và trả lại trạng thái lỗi. Nếu GROUPS không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

HISTCMD

Số lịch sử hoặc chỉ mục trong danh sách lịch sử của lệnh hiện tại. Nếu HISTCMD không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

HOSTNAME

Tự động đặt thành tên của máy chủ hiện tại.

HOSTTYPE

Tự động đặt thành chuỗi mô tả duy nhất loại máy mà bash đang thực thi. Mặc định là phụ thuộc vào hệ thống.

LINENO

Mỗi lần tham số này được tham chiếu, shell thay thế một số thập phân đại diện cho số dòng tuần tự hiện tại (bắt đầu bằng 1) trong một tập lệnh hoặc hàm. Khi không có trong một tập lệnh hoặc hàm, giá trị được thay thế không được đảm bảo là có ý nghĩa. Nếu LINENO không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

MACHTYPE

Tự động đặt thành chuỗi mô tả đầy đủ loại hệ thống mà bash đang thực thi, theo định dạng hệ thống cpu-công ty GNU chuẩn. Mặc định là phụ thuộc vào hệ thống.

OLDPWD

Thư mục làm việc trước đó được thiết lập bởi lệnh cd .

OPTARG

Giá trị của đối số tùy chọn cuối cùng được xử lý bởi lệnh nội trang getopts (xem SHELL BUILTIN COMMANDS bên dưới).

OPTIND

Chỉ mục của đối số tiếp theo được xử lý bởi lệnh nội trang getopts (xem SHELL BUILTIN COMMANDS bên dưới).

OSTYPE

Tự động đặt thành chuỗi mô tả hệ điều hành mà bash đang thực thi. Mặc định là phụ thuộc vào hệ thống.

PIPESTATUS

Một biến mảng (xem Mảng dưới đây) chứa danh sách các giá trị trạng thái thoát khỏi các quy trình trong đường ống nền trước được thực thi gần đây nhất (có thể chỉ chứa một lệnh duy nhất).

PPID

ID tiến trình của cha mẹ của trình bao. Biến này là chỉ đọc.

NKT

Thư mục làm việc hiện tại như được thiết lập bởi lệnh cd .

RANDOM

Mỗi lần tham số này được tham chiếu, một số nguyên ngẫu nhiên giữa 0 và 32767 được tạo. Trình tự các số ngẫu nhiên có thể được khởi tạo bằng cách gán giá trị cho RANDOM . Nếu RANDOM không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

ĐÁP LẠI

Đặt thành dòng đầu vào được đọc bởi lệnh nội trang đã đọc khi không có đối số nào được cung cấp.

SECONDS

Mỗi lần tham số này được tham chiếu, số giây kể từ khi trình gọi vỏ được trả về. Nếu giá trị được gán cho SECONDS , giá trị được trả lại khi tham chiếu tiếp theo là số giây kể từ lần gán cộng với giá trị được gán. Nếu SECONDS không được đặt, nó sẽ mất các thuộc tính đặc biệt của nó, ngay cả khi nó được đặt lại sau đó.

SHELLOPTS

Danh sách các tùy chọn vỏ đã bật được phân tách bằng dấu hai chấm. Mỗi từ trong danh sách là một đối số hợp lệ cho tùy chọn -o cho lệnh dựng sẵn được thiết lập (xem SHELL BUILTIN COMMANDS bên dưới). Các tùy chọn xuất hiện trong SHELLOPTS là các tùy chọn được báo cáo như trên bởi set -o . Nếu biến này nằm trong môi trường khi bash khởi động, thì mỗi tùy chọn trình bao trong danh sách sẽ được kích hoạt trước khi đọc bất kỳ tệp khởi động nào. Biến này là chỉ đọc.

SHLVL

Được tăng lên một lần mỗi khi một thể hiện bash được bắt đầu.

UID

Mở rộng đến ID người dùng của người dùng hiện tại, được khởi tạo lúc khởi động trình bao. Biến này là chỉ đọc.

Các biến sau được sử dụng bởi trình bao. Trong một số trường hợp, bash gán giá trị mặc định cho biến; những trường hợp này được ghi chú bên dưới.

BASH_ENV

Nếu tham số này được thiết lập khi bash đang thi hành một kịch bản lệnh shell, giá trị của nó được hiểu là tên tệp chứa các lệnh để khởi tạo trình bao, như trong ~ / .bashrc . Giá trị của BASH_ENV phải chịu sự mở rộng tham số, thay thế lệnh và mở rộng số học trước khi được hiểu là tên tệp. PATH không được sử dụng để tìm kiếm tên tệp kết quả.

CDPATH

Đường dẫn tìm kiếm cho lệnh cd . Đây là danh sách các thư mục được phân tách bằng dấu hai chấm, trong đó vỏ tìm các thư mục đích được chỉ định bởi lệnh cd . Giá trị mẫu là ".: ~: / Usr".

CỘT

Được sử dụng bởi lệnh dựng sẵn được chọn để xác định chiều rộng đầu cuối khi in danh sách lựa chọn. Tự động thiết lập khi nhận được SIGWINCH.

COMPREPLY

Một biến mảng mà từ đó bash đọc các hoàn thành có thể được tạo ra bởi một hàm shell được gọi bởi cơ sở hoàn thành lập trình (xem phần Hoàn thành lập trình bên dưới).

FCEDIT

Trình soạn thảo mặc định cho lệnh dựng sẵn fc .

FIGNORE

Một danh sách các hậu tố được phân tách bằng dấu hai chấm để bỏ qua khi thực hiện hoàn thành tên tệp (xem READLINE bên dưới). Tên tệp có hậu tố khớp với một trong các mục nhập trong FIGNORE bị loại trừ khỏi danh sách tên tệp phù hợp. Giá trị mẫu là ".o: ~".

GLOBIGNORE

Danh sách các mẫu được phân tách bằng dấu hai chấm xác định tập hợp tên tệp sẽ bị bỏ qua bằng cách mở rộng tên đường dẫn. Nếu tên tệp được khớp với mẫu mở rộng tên đường dẫn cũng khớp với một trong các mẫu trong GLOBIGNORE , tên tệp đó sẽ bị xóa khỏi danh sách kết quả phù hợp.

HISTCONTROL

Nếu được đặt thành giá trị của khoảng trắng , các dòng bắt đầu bằng ký tự khoảng trắng sẽ không được nhập vào danh sách lịch sử. Nếu được đặt thành giá trị của các lần bỏ qua , các dòng khớp với dòng lịch sử cuối cùng sẽ không được nhập. Giá trị của ignoreboth kết hợp hai tùy chọn. Nếu không được đặt hoặc nếu được đặt thành bất kỳ giá trị nào khác ngoài các giá trị trên, tất cả các dòng được đọc bởi trình phân tích cú pháp được lưu vào danh sách lịch sử, tùy thuộc vào giá trị của HISTIGNORE . Chức năng của biến này được thay thế bởi HISTIGNORE . Các dòng thứ hai và tiếp theo của một lệnh ghép nhiều dòng không được kiểm tra và được thêm vào lịch sử bất kể giá trị của HISTCONTROL .

HISTFILE

Tên của tệp trong đó lịch sử lệnh được lưu (xem HISTORY bên dưới). Giá trị mặc định là ~ / .bash_history . Nếu không được đặt, lịch sử lệnh sẽ không được lưu khi một trình bao tương tác thoát.

HISTFILESIZE

Số dòng tối đa chứa trong tệp lịch sử. Khi biến này được gán một giá trị, tệp lịch sử sẽ bị cắt bớt, nếu cần, để không chứa nhiều hơn số dòng đó. Giá trị mặc định là 500. Tệp lịch sử cũng bị cắt bớt thành kích thước này sau khi ghi nó khi một trình bao tương tác thoát.

HISTIGNORE

Một danh sách các mẫu được phân tách bằng dấu hai chấm dùng để quyết định các dòng lệnh nào sẽ được lưu trong danh sách lịch sử. Mỗi mẫu được neo ở đầu dòng và phải khớp với dòng hoàn chỉnh (không có thêm ` * 'được thêm vào). Mỗi mẫu được kiểm tra dựa trên dòng sau khi kiểm tra được chỉ định bởi HISTCONTROL được áp dụng. Ngoài các ký tự phù hợp với mẫu vỏ bình thường, ` & 'khớp với dòng lịch sử trước đó. ` & 'có thể được thoát bằng cách sử dụng dấu gạch chéo ngược; dấu gạch chéo ngược bị xóa trước khi thử khớp. Các dòng thứ hai và tiếp theo của lệnh ghép nhiều dòng không được kiểm tra và được thêm vào lịch sử bất kể giá trị của HISTIGNORE .

HISTSIZE

Số lượng lệnh cần nhớ trong lịch sử lệnh (xem HISTORY bên dưới). Giá trị mặc định là 500.

NHÀ

Thư mục chính của người dùng hiện tại; đối số mặc định cho lệnh nội trang cd . Giá trị của biến này cũng được sử dụng khi thực hiện mở rộng dấu ngã.

HOSTFILE

Chứa tên của một tệp có cùng định dạng với / etc / hosts cần được đọc khi trình bao cần hoàn thành tên máy chủ. Danh sách các hoàn thành tên máy chủ có thể được thay đổi trong khi trình bao đang chạy; thời gian tiếp theo hoàn thành tên máy chủ được cố gắng sau khi giá trị được thay đổi, bash thêm nội dung của tệp mới vào danh sách hiện có. Nếu HOSTFILE được thiết lập, nhưng không có giá trị, bash cố gắng đọc / etc / hosts để có được danh sách các hoàn thành tên máy chủ có thể có. Khi HOSTFILE không được đặt, danh sách tên máy chủ sẽ bị xóa.

IFS

Bộ tách trường nội bộ được sử dụng để tách từ sau khi mở rộng và chia các dòng thành các từ bằng lệnh nội trang đã đọc . Giá trị mặc định là `` ''.

IGNOREEOF

Điều khiển hành động của một trình bao tương tác khi nhận được một ký tự EOF làm đầu vào duy nhất. Nếu được đặt, giá trị là số ký tự EOF liên tiếp phải được nhập làm ký tự đầu tiên trên dòng đầu vào trước khi thoát. Nếu biến tồn tại nhưng không có giá trị số, hoặc không có giá trị, giá trị mặc định là 10. Nếu nó không tồn tại, EOF biểu thị kết thúc đầu vào cho trình bao.

INPUTRC

Tên tệp cho tệp khởi động readline , ghi đè mặc định của ~ / .inputrc (xem READLINE bên dưới).

LANG

Được sử dụng để xác định danh mục ngôn ngữ cho bất kỳ danh mục nào không được chọn cụ thể với biến bắt đầu bằng LC_ .

LC_ALL

Biến này ghi đè giá trị của LANG và bất kỳ biến LC_ nào khác chỉ định một thể loại miền địa phương.

LC_COLLATE

Biến này xác định thứ tự đối chiếu được sử dụng khi phân loại kết quả mở rộng tên đường dẫn và xác định hành vi của các biểu thức phạm vi, các lớp tương đương và chuỗi sắp xếp trong mở rộng tên đường dẫn và đối sánh mẫu.

LC_CTYPE

Biến này xác định việc diễn giải các ký tự và hành vi của các lớp ký tự trong mở rộng tên đường dẫn và đối sánh mẫu.

LC_MESSAGES

Biến này xác định miền địa phương được sử dụng để dịch các chuỗi được trích dẫn kép được bắt đầu bởi $ .

LC_NUMERIC

Biến này xác định danh mục miền địa phương được sử dụng để định dạng số.

DÒNG

Được sử dụng bởi lệnh dựng sẵn được chọn để xác định chiều dài cột để in danh sách lựa chọn. Tự động thiết lập khi nhận được SIGWINCH.

THƯ

Nếu tham số này được đặt thành tên tệp và biến MAILPATH không được đặt, bash sẽ thông báo cho người dùng về sự xuất hiện của thư trong tệp được chỉ định.

MAILCHECK

Chỉ định tần suất (tính bằng giây) bash kiểm tra thư. Mặc định là 60 giây. Khi đã đến lúc kiểm tra thư, trình bao sẽ thực hiện trước khi hiển thị lời nhắc chính. Nếu biến này không được đặt hoặc được đặt thành giá trị không phải là số lớn hơn hoặc bằng 0, trình bao sẽ tắt kiểm tra thư.

MAILPATH

Danh sách tên tệp được phân tách bằng dấu hai chấm được kiểm tra thư. Thông báo sẽ được in khi thư đến trong một tệp cụ thể có thể được chỉ định bằng cách tách tên tệp khỏi thư bằng ký tự '?'. Khi được sử dụng trong văn bản của thư, $ _ mở rộng đến tên của tệp thư hiện tại. Thí dụ:

MAILPATH = '/ var / mail / bfox? "Bạn có thư": ~ / shell-mail? "$ _ Có thư!"'

Bash cung cấp một giá trị mặc định cho biến này, nhưng vị trí của các tệp thư người dùng mà nó sử dụng phụ thuộc vào hệ thống (ví dụ, / var / mail / $ USER ).

OPTERR

Nếu được đặt thành giá trị 1, bash sẽ hiển thị thông báo lỗi được tạo bởi lệnh nội trang getopts (xem SHELL BUILTIN COMMANDS bên dưới). OPTERR được khởi tạo đến 1 mỗi lần trình bao được gọi hoặc một kịch bản lệnh shell được thực hiện.

CON ĐƯỜNG

Đường dẫn tìm kiếm cho các lệnh. Nó là danh sách các thư mục được phân cách bằng dấu hai chấm, trong đó vỏ tìm kiếm các lệnh (xem COMMAND EXECUTION bên dưới). Đường dẫn mặc định phụ thuộc vào hệ thống và được thiết lập bởi quản trị viên cài đặt bash . Giá trị chung là `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

Nếu biến này nằm trong môi trường khi bash khởi động, trình bao sẽ chuyển sang chế độ posix trước khi đọc các tệp khởi động, như thể tùy chọn lời gọi --posix đã được cung cấp. Nếu nó được đặt trong khi shell đang chạy, bash cho phép chế độ posix , như thể lệnh set -o posix đã được thực thi.

PROMPT_COMMAND

Nếu được đặt, giá trị được thực hiện như một lệnh trước khi phát hành từng lời nhắc chính.

PS1

Giá trị của tham số này được mở rộng (xem PROMPTING bên dưới) và được sử dụng làm chuỗi nhắc chính. Giá trị mặc định là `` \ s- \ v \ $ ''.

PS2

Giá trị của tham số này được mở rộng như với PS1 và được sử dụng làm chuỗi dấu nhắc phụ. Mặc định là `` > ''.

PS3

Giá trị của tham số này được sử dụng làm dấu nhắc cho lệnh select (xem SHELL GRAMMAR ở trên).

PS4

Giá trị của tham số này được mở rộng như với PS1 và giá trị được in trước mỗi lệnh bash hiển thị trong một dấu vết thực thi. Nhân vật đầu tiên của PS4 được nhân rộng nhiều lần, khi cần thiết, để biểu thị nhiều cấp độ không xác định. Giá trị mặc định là `` + ''.

TIMEFORMAT

Giá trị của tham số này được sử dụng như một chuỗi định dạng xác định cách thông tin thời gian cho các đường ống có tiền tố với từ dành riêng cho thời gian sẽ được hiển thị. Ký tự % giới thiệu chuỗi thoát được mở rộng thành giá trị thời gian hoặc thông tin khác. Trình tự thoát và ý nghĩa của chúng như sau; các dấu ngoặc biểu thị các phần tùy chọn.

%%

Một chữ % .

% [ p ] [l] R

Thời gian trôi qua tính bằng giây.

% [ p ] [l] U

Số giây CPU đã sử dụng trong chế độ người dùng.

% [ p ] [l] S

Số giây CPU đã sử dụng trong chế độ hệ thống.

% P

Tỷ lệ phần trăm CPU, được tính bằng (% U +% S) /% R.

P tùy chọn là một chữ số chỉ định độ chính xác , số chữ số thập phân sau dấu thập phân. Giá trị 0 không gây ra dấu thập phân hoặc phân số. Có thể chỉ định tối đa ba vị trí sau dấu thập phân; các giá trị của p lớn hơn 3 được thay đổi thành 3. Nếu p không được chỉ định, giá trị 3 được sử dụng.

Tùy chọn l chỉ định định dạng dài hơn, kể cả phút, có dạng MM m SS . FF s. Giá trị của p xác định có hay không phân số được bao gồm.

Nếu biến này không được đặt, bash sẽ hoạt động như thể nó có giá trị $ '\ nreal \ t% 3lR \ nuser \ t% 3lU \ nsys% 3lS' . Nếu giá trị là null, không có thông tin thời gian nào được hiển thị. Một dòng mới được thêm vào khi chuỗi định dạng được hiển thị.

TMOUT

Nếu được đặt thành một giá trị lớn hơn 0, TMOUT được coi là thời gian chờ mặc định cho nội dung đã đọc . Lệnh chọn kết thúc nếu đầu vào không đến sau giây TMOUT khi đầu vào đến từ một thiết bị đầu cuối. Trong một trình bao tương tác, giá trị được hiểu là số giây để đợi đầu vào sau khi phát ra dấu nhắc chính. Bash kết thúc sau khi đợi số giây đó nếu đầu vào không đến.

auto_resume

Biến này kiểm soát cách trình bao tương tác với người dùng và điều khiển công việc. Nếu biến này được đặt, các lệnh đơn từ đơn giản mà không có chuyển hướng được coi là các ứng cử viên để nối lại một công việc đã dừng hiện có. Không có sự mơ hồ được phép; nếu có nhiều hơn một công việc bắt đầu bằng chuỗi đã nhập, công việc được truy cập gần đây nhất được chọn. Tên của một công việc bị dừng, trong ngữ cảnh này, là dòng lệnh được sử dụng để khởi động nó. Nếu được đặt thành giá trị chính xác , chuỗi được cung cấp phải khớp với tên của một công việc đã dừng chính xác; nếu được đặt thành chuỗi con , chuỗi được cung cấp cần phải khớp với chuỗi con của tên của công việc đã dừng. Giá trị chuỗi con cung cấp chức năng tương tự với %? số nhận dạng công việc (xem JOB CONTROL bên dưới). Nếu được đặt thành bất kỳ giá trị nào khác, chuỗi được cung cấp phải là tiền tố của tên công việc đã dừng; điều này cung cấp chức năng tương tự với số nhận dạng công việc % .

lịch sử

Hai hoặc ba ký tự kiểm soát mở rộng lịch sử và mã thông báo (xem HISTORY EXPANSION bên dưới). Ký tự đầu tiên là ký tự mở rộng lịch sử , ký tự báo hiệu sự bắt đầu mở rộng lịch sử, thông thường là ` ! '. Ký tự thứ hai là ký tự thay thế nhanh , được sử dụng như viết tắt để chạy lại lệnh trước đã nhập, thay thế một chuỗi ký tự khác trong lệnh. Giá trị mặc định là ` ^ '. Ký tự thứ ba tùy chọn là ký tự cho biết phần còn lại của dòng là nhận xét khi được tìm thấy làm ký tự đầu tiên của một từ, thường là ` # '. Ký tự nhận xét lịch sử làm thay thế lịch sử bị bỏ qua cho các từ còn lại trên dòng. Nó không nhất thiết làm cho trình phân tích cú pháp trình bao xử lý phần còn lại của dòng dưới dạng nhận xét.

Mảng

Bash cung cấp các biến mảng một chiều. Bất kỳ biến nào cũng có thể được sử dụng như một mảng; tuyên bố nội trang sẽ khai báo rõ ràng một mảng. Không có giới hạn tối đa về kích thước của một mảng, cũng không yêu cầu các thành viên được lập chỉ mục hoặc gán liên tục. Mảng được lập chỉ mục sử dụng số nguyên và không dựa trên.

Một mảng được tạo tự động nếu bất kỳ biến nào được gán cho sử dụng tên cú pháp [ subscript ] = value . Chỉ số được coi là biểu thức số học phải đánh giá một số lớn hơn hoặc bằng không. Để khai báo một mảng rõ ràng, hãy sử dụng tên khai báo -a (xem SHELL BUILTIN COMMANDS bên dưới). khai báo-một tên [ subscript ] cũng được chấp nhận; subscript bị bỏ qua. Các thuộc tính có thể được chỉ định cho một biến mảng bằng cách sử dụng các nội trang dựng sẵn và khai báo . Mỗi thuộc tính áp dụng cho tất cả các thành viên của một mảng.

Mảng được gán cho việc sử dụng các phép gán phức hợp của tên biểu mẫu = ( giá trị 1 ... giá trị n ) , trong đó mỗi giá trị có dạng [ subscript ] = string . Chỉ có chuỗi là bắt buộc. Nếu các dấu ngoặc và chỉ số tùy chọn được cung cấp, chỉ mục đó được gán cho; nếu không thì chỉ mục của phần tử được gán là chỉ mục cuối cùng được gán bởi câu lệnh cộng với một. Lập chỉ mục bắt đầu từ số không. Cú pháp này cũng được chấp nhận bởi nội trang dựng sẵn. Các phần tử mảng riêng lẻ có thể được gán cho sử dụng cú pháp tên [ subscript ] = value được giới thiệu ở trên.

Việc xây dựng unset được sử dụng để phá hủy mảng. unset name [ subscript ] phá hủy phần tử mảng tại chỉ số chỉ mục. unset name , trong đó name là một mảng, hoặc unset name [ subscript ], trong đó subscript* hoặc @ , loại bỏ toàn bộ mảng.

Mỗi nội trang khai báo , cục bộchỉ đọc chấp nhận tùy chọn -a để chỉ định một mảng. Trình soạn thảo đọc chấp nhận tùy chọn -a để chỉ định danh sách các từ được đọc từ đầu vào chuẩn cho một mảng. Tập hợpkhai báo nội trang hiển thị các giá trị mảng theo cách cho phép chúng được tái sử dụng làm bài tập.

SỰ BÀNH TRƯỚNG

Mở rộng được thực hiện trên dòng lệnh sau khi nó được chia thành các từ. Có bảy loại mở rộng được thực hiện: mở rộng cú đúp , mở rộng dấu ngã , tham số và mở rộng biến , thay thế lệnh , mở rộng số học , tách từmở rộng tên đường dẫn .

Thứ tự mở rộng là: mở rộng cú đúp, mở rộng dấu ngã, tham số, biến và mở rộng số học và thay thế lệnh (được thực hiện theo kiểu từ trái sang phải), tách từ và mở rộng tên đường dẫn.

Trên các hệ thống có thể hỗ trợ nó, có một sự mở rộng bổ sung có sẵn: thay thế tiến trình .

Mở rộng Brace

Brace mở rộng là một cơ chế mà theo đó các chuỗi tùy ý có thể được tạo ra. Cơ chế này tương tự như mở rộng tên đường dẫn , nhưng tên tệp được tạo không cần tồn tại. Các mẫu được nẹp mở rộng có dạng một phần mở đầu tùy chọn, theo sau là một chuỗi các chuỗi được phân tách bằng dấu phẩy giữa một cặp dấu ngoặc, theo sau là một bản ghi tùy chọn. Lời mở đầu được đặt trước cho mỗi chuỗi chứa trong dấu ngoặc và sau đó, postscript được nối thêm vào mỗi chuỗi kết quả, mở rộng từ trái sang phải.

Brace mở rộng có thể được lồng nhau. Các kết quả của mỗi chuỗi mở rộng không được sắp xếp; thứ tự từ trái sang phải được giữ nguyên. Ví dụ: { d, c, b } e mở rộng thành `ade ace abe '.

Mở rộng cú đúp được thực hiện trước bất kỳ mở rộng nào khác và bất kỳ ký tự đặc biệt nào cho các mở rộng khác đều được giữ nguyên trong kết quả. Nó hoàn toàn là văn bản. Bash không áp dụng bất kỳ giải thích cú pháp nào cho bối cảnh mở rộng hoặc văn bản giữa các dấu ngoặc.

Cấu trúc này thường được sử dụng như viết tắt khi tiền tố chung của các chuỗi được tạo dài hơn trong ví dụ trên:

mkdir / usr / local / src / bash / {cũ, mới, lỗi, lỗi}

hoặc là

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Brace mở rộng giới thiệu một chút không tương thích với các phiên bản lịch sử của sh . sh không xử lý việc mở hoặc đóng niềng răng đặc biệt khi chúng xuất hiện như là một phần của một từ và giữ chúng ở đầu ra. Bash loại bỏ niềng răng khỏi các từ như là kết quả của việc mở rộng cú đúp. Ví dụ: một từ được nhập vào sh dưới dạng tệp {1,2} sẽ xuất hiện giống nhau ở đầu ra. Cùng một từ là đầu ra như file1 file2 sau khi mở rộng bằng bash . Nếu bạn muốn có khả năng tương thích chặt chẽ với sh , hãy bắt đầu bash với tùy chọn + B hoặc vô hiệu hóa mở rộng cú đúp bằng tùy chọn + B cho lệnh set (xem SHELL BUILTIN COMMANDS bên dưới).

Mở rộng dấu ngã

Nếu một từ bắt đầu bằng ký tự dấu ngã (` ~ '), tất cả các ký tự trước dấu gạch chéo chưa được trích dẫn đầu tiên (hoặc tất cả các ký tự, nếu không có dấu gạch chéo không được trích dẫn) được coi là tiền tố dấu ngã . Nếu không có ký tự nào trong tiền tố dấu ngã được trích dẫn, các ký tự trong tiền tố dấu ngã sau dấu ngã được coi là tên đăng nhập có thể. Nếu tên đăng nhập này là chuỗi rỗng, dấu ngã được thay thế bằng giá trị của tham số shell HOME . Nếu HOME không được đặt, thư mục chính của người dùng thực hiện trình bao được thay thế. Nếu không, tiền tố dấu ngã được thay thế bằng thư mục chính được liên kết với tên đăng nhập được chỉ định.

Nếu tiền tố dấu ngã là một `~ + ', giá trị của biến shell PWD thay thế tiền tố dấu ngã. Nếu tiền tố dấu ngã là `~ - ', giá trị của biến shell OLDPWD , nếu nó được đặt, được thay thế. Nếu các ký tự sau dấu ngã trong tiền tố dấu ngã bao gồm một số N , có tiền tố tùy chọn bằng dấu '+' hoặc `- ', tiền tố dấu ngã được thay thế bằng phần tử tương ứng từ ngăn xếp thư mục, vì nó sẽ được hiển thị bởi nội trang dirs được viện dẫn với tiền tố dấu ngã làm đối số. Nếu các ký tự theo dấu ngã trong tiền tố dấu ngã bao gồm một số không có `+ 'hoặc` -' hàng đầu, thì `+ 'được giả định.

Nếu tên đăng nhập không hợp lệ hoặc mở rộng dấu ngã không thành công, từ đó không thay đổi.

Mỗi phép gán biến được kiểm tra cho các tiền tố dấu ngã chưa được trích dẫn ngay sau a : hoặc = . Trong những trường hợp này, việc mở rộng dấu ngã cũng được thực hiện. Do đó, người ta có thể sử dụng tên tệp có dấu ngã trong các nhiệm vụ cho PATH , MAILPATHCDPATH và trình bao gán giá trị được mở rộng.

Mở rộng tham số

Ký tự ` $ 'giới thiệu mở rộng tham số, thay thế lệnh hoặc mở rộng số học. Tên tham số hoặc biểu tượng được mở rộng có thể được đặt trong dấu ngoặc, tùy chọn nhưng phục vụ để bảo vệ biến được mở rộng từ các ký tự ngay sau nó có thể được hiểu là một phần của tên.

Khi niềng răng được sử dụng, dấu ngoặc kết thúc khớp là ` } 'đầu tiên không được thoát bằng dấu gạch chéo ngược hoặc trong chuỗi được trích dẫn, và không nằm trong phần mở rộng số học được nhúng, thay thế lệnh hoặc mở rộng paramter.

Giá trị của tham số được thay thế. Niềng răng được yêu cầu khi tham số là một tham số vị trí có nhiều hơn một chữ số, hoặc khi tham số được theo sau bởi một ký tự không được hiểu là một phần của tên của nó.

Trong mỗi trường hợp dưới đây, từ có thể mở rộng dấu ngã, mở rộng tham số, thay thế lệnh và mở rộng số học. Khi không thực hiện mở rộng chuỗi con, kiểm tra bash cho một tham số không được đặt hoặc null; bỏ qua các kết quả đại tràng trong một thử nghiệm chỉ cho một tham số không được đặt.

Sử dụng giá trị mặc định . Nếu tham số không được đặt hoặc null, thì việc mở rộng từ được thay thế. Nếu không, giá trị của tham số được thay thế.

Gán Giá trị Mặc định . Nếu tham số không được đặt hoặc null, thì việc mở rộng từ được gán cho tham số . Giá trị của tham số sau đó được thay thế. Tham số vị trí và tham số đặc biệt có thể không được gán theo cách này.

Lỗi hiển thị nếu Null hoặc Unset . Nếu tham số là null hoặc không được đặt, việc mở rộng từ (hoặc một thông báo đến hiệu ứng đó nếu từ không có) được ghi vào lỗi tiêu chuẩn và trình bao, nếu nó không tương tác, thoát. Nếu không, giá trị của tham số được thay thế.

Sử dụng Giá trị thay thế . Nếu tham số là null hoặc không được đặt, không có gì được thay thế, nếu không thì việc mở rộng từ được thay thế.

Mở rộng đến tên của các biến có tên bắt đầu bằng tiền tố , được phân tách bằng ký tự đầu tiên của biến đặc biệt IFS .

Độ dài ký tự của giá trị tham số được thay thế. Nếu tham số* hoặc @ , giá trị được thay thế là số tham số vị trí. Nếu tham số là tên mảng được lập chỉ mục bởi * hoặc @ , giá trị được thay thế là số phần tử trong mảng.

Từ này được mở rộng để tạo ra một mẫu giống như trong mở rộng tên đường dẫn. Nếu mẫu khớp với giá trị bắt đầu của tham số , thì kết quả của việc mở rộng là giá trị mở rộng của tham số với mẫu phù hợp ngắn nhất (trường hợp `` # '') hoặc mẫu phù hợp dài nhất (`` ## ' 'trường hợp' đã bị xóa. Nếu tham số@ hoặc * , thao tác loại bỏ mẫu được áp dụng cho từng tham số vị trí lần lượt và mở rộng là danh sách kết quả. Nếu tham số là biến mảng được lập chỉ mục bằng @ hoặc * , thao tác xóa mẫu được áp dụng cho từng thành viên của mảng lần lượt và việc mở rộng là danh sách kết quả.

Từ này được mở rộng để tạo ra một mẫu giống như trong mở rộng tên đường dẫn. Nếu mẫu khớp với phần sau của giá trị mở rộng của tham số , thì kết quả của việc mở rộng là giá trị được mở rộng của tham số với mẫu phù hợp ngắn nhất (trường hợp `` % '') hoặc mẫu phù hợp dài nhất (`` % % '' case) đã bị xóa. Nếu tham số@ hoặc * , thao tác loại bỏ mẫu được áp dụng cho từng tham số vị trí lần lượt và mở rộng là danh sách kết quả. Nếu tham số là biến mảng được lập chỉ mục bằng @ hoặc * , thao tác xóa mẫu được áp dụng cho từng thành viên của mảng lần lượt và việc mở rộng là danh sách kết quả.

Mẫu được mở rộng để tạo ra một mẫu giống như trong việc mở rộng tên đường dẫn. Tham số được mở rộng và kết hợp mẫu dài nhất với giá trị của nó được thay thế bằng chuỗi . Trong hình thức đầu tiên, chỉ có trận đấu đầu tiên được thay thế. Dạng thứ hai làm cho tất cả các kết quả khớp của mẫu được thay thế bằng chuỗi . Nếu mẫu bắt đầu bằng # , nó phải khớp với đầu giá trị mở rộng của thông số . Nếu mẫu bắt đầu bằng % , mẫu phải khớp ở cuối giá trị mở rộng của thông số . Nếu chuỗi là null, các kết quả khớp của mẫu sẽ bị xóa và mẫu / sau có thể bị bỏ qua. Nếu tham số@ hoặc * , thì hoạt động thay thế được áp dụng cho mỗi tham số vị trí lần lượt và mở rộng là danh sách kết quả. Nếu tham số là một biến mảng được lập chỉ mục với @ hoặc * , thì hoạt động thay thế được áp dụng cho từng thành viên của mảng lần lượt, và việc mở rộng là danh sách kết quả.

Lệnh thay thế

Lệnh thay thế cho phép đầu ra của một lệnh để thay thế tên lệnh. Có hai dạng:

$ ( lệnh )

hoặc là

` lệnh`

Bash thực hiện việc mở rộng bằng cách thực hiện lệnh và thay thế lệnh thay thế bằng đầu ra tiêu chuẩn của lệnh, với bất kỳ dấu dòng mới nào bị xóa. Các dòng mới được nhúng sẽ không bị xóa, nhưng chúng có thể bị xóa trong khi tách từ. Lệnh thay thế $ (cat file ) có thể được thay thế bằng giá trị tương đương nhưng nhanh hơn $ (< file ).

Khi sử dụng dạng thay thế backquote kiểu cũ, dấu gạch chéo ngược giữ lại nghĩa đen của nó trừ khi được theo sau bởi $ , ` , hoặc \ . Các backquote đầu tiên không phải trước bởi một dấu gạch chéo ngược chấm dứt sự thay thế lệnh. Khi sử dụng biểu mẫu $ ( command ), tất cả các ký tự giữa các dấu ngoặc đơn tạo nên lệnh; không ai được điều trị đặc biệt.

Lệnh thay thế có thể được lồng nhau. Để lồng khi sử dụng biểu mẫu được kiểm tra lại, hãy thoát khỏi các dấu ngoặc ngược bên trong với các dấu gạch chéo ngược.

Nếu sự thay thế xuất hiện trong dấu ngoặc kép, việc tách từ và mở rộng tên đường dẫn không được thực hiện trên các kết quả.

Mở rộng số học

Việc mở rộng số học cho phép đánh giá biểu thức số học và thay thế kết quả. Định dạng để mở rộng số học là:

$ (( biểu thức ))

Biểu thức được xử lý như thể nó nằm trong dấu ngoặc kép, nhưng một dấu ngoặc kép bên trong dấu ngoặc đơn không được xử lý đặc biệt. Tất cả các thẻ trong biểu thức trải qua việc mở rộng tham số, mở rộng chuỗi, thay thế lệnh và xóa trích dẫn. Thay thế số học có thể được lồng nhau.

Việc đánh giá được thực hiện theo các quy tắc được liệt kê dưới đây theo ĐÁNH GIÁ ARITHMETIC . Nếu biểu thức không hợp lệ, bash sẽ in một thông báo cho biết lỗi và không có sự thay thế nào xảy ra.

Thay thế quy trình

Thay thế quy trình được hỗ trợ trên các hệ thống hỗ trợ các đường ống có tên ( FIFO ) hoặc phương pháp / dev / fd để đặt tên các tệp đang mở. Nó có dạng <( danh sách ) hoặc > ( danh sách ) . Danh sách quy trình được chạy với đầu vào hoặc đầu ra của nó được kết nối với FIFO hoặc một số tệp trong / dev / fd . Tên của tệp này được chuyển làm đối số cho lệnh hiện tại dưới dạng kết quả của việc mở rộng. Nếu biểu mẫu > ( danh sách ) được sử dụng, việc ghi vào tệp sẽ cung cấp đầu vào cho danh sách . Nếu biểu mẫu <( danh sách ) được sử dụng, tệp được truyền dưới dạng đối số nên được đọc để có được kết quả đầu ra của danh sách .

Khi có sẵn, quá trình thay thế được thực hiện đồng thời với việc mở rộng tham số và biến, thay thế lệnh và mở rộng số học.

Tách từ

Shell quét các kết quả của việc mở rộng tham số, thay thế lệnh và mở rộng số học không xảy ra trong các dấu ngoặc kép để tách từ .

Shell xử lý từng ký tự của IFS như một dấu phân cách và tách các kết quả của các mở rộng khác thành các từ trên các ký tự này. Nếu IFS không được đặt, hoặc giá trị của nó chính xác là , giá trị mặc định, thì bất kỳ chuỗi ký tự IFS nào sẽ phân tách các từ. Nếu IFS có giá trị khác với giá trị mặc định, thì các chuỗi ký tự khoảng trốngtab được bỏ qua ở đầu và cuối của từ, miễn là ký tự khoảng trắng nằm trong giá trị của IFS (ký tự khoảng trắng IFS ). Bất kỳ ký tự nào trong IFS không phải là khoảng trống IFS , cùng với bất kỳ ký tự khoảng trống IFS lân cận nào, sẽ phân tách một trường. Một chuỗi các ký tự khoảng trống IFS cũng được coi là dấu tách. Nếu giá trị của IFS là null, không có sự phân tách từ nào xảy ra.

Đối số rỗng rõ ràng ( "" hoặc "" ) được giữ lại. Các đối số rỗng không xác định, kết quả từ việc mở rộng các tham số không có giá trị, được loại bỏ. Nếu một tham số không có giá trị được mở rộng trong dấu ngoặc kép, kết quả đối số null và được giữ lại.

Lưu ý rằng nếu không có mở rộng xảy ra, không có chia tách được thực hiện.

Mở rộng tên đường dẫn

Sau khi tách từ, trừ khi tùy chọn -f đã được đặt, bash sẽ quét mỗi từ cho ký tự * ,?[ . Nếu một trong các ký tự này xuất hiện, thì từ đó được coi là mẫu và được thay thế bằng một danh sách tên tệp được sắp xếp theo thứ tự bảng chữ cái khớp với mẫu. Nếu không tìm thấy tên tập tin phù hợp, và tùy chọn shell nullglob bị tắt, từ đó sẽ không thay đổi. Nếu tùy chọn nullglob được đặt và không tìm thấy kết quả phù hợp nào thì từ đó sẽ bị xóa. Nếu tùy chọn vỏ nocaseglob được bật, kết quả trùng khớp được thực hiện mà không tính đến trường hợp ký tự chữ cái. Khi một mẫu được sử dụng để mở rộng tên đường dẫn, ký tự ``. '' Ở đầu tên hoặc ngay sau dấu gạch chéo phải được đối sánh một cách rõ ràng, trừ khi tùy chọn trình bao dotglob được đặt. Khi khớp với tên đường dẫn, ký tự dấu gạch chéo phải luôn được đối sánh một cách rõ ràng. Trong các trường hợp khác, ký tự ``. '' Không được xử lý đặc biệt. Xem mô tả về shopt dưới SHELL BUILTIN COMMANDS để có mô tả về các tùy chọn nocaseglob , nullglobdotglob .

Biến shell GLOBIGNORE có thể được sử dụng để hạn chế tập các tên tập tin phù hợp với một mẫu . Nếu GLOBIGNORE được đặt, mỗi tên tệp phù hợp cũng khớp với một trong các mẫu trong GLOBIGNORE sẽ bị xóa khỏi danh sách kết quả phù hợp. Các tên tệp ``. ''`` .. '' luôn bị bỏ qua, ngay cả khi GLOBIGNORE được đặt. Tuy nhiên, thiết lập GLOBIGNORE có tác dụng kích hoạt tùy chọn trình bao dotglob , vì vậy tất cả các tên tệp khác bắt đầu bằng ``. '' Sẽ khớp. Để có được hành vi cũ của việc bỏ qua các tên tập tin bắt đầu bằng một ``. '' , Làm cho ``. * '' Một trong các mẫu trong GLOBIGNORE . Tùy chọn dotglob bị tắt khi GLOBIGNORE không được đặt.

Khớp mẫu

Bất kỳ ký tự nào xuất hiện trong một mẫu, ngoài các ký tự mẫu đặc biệt được mô tả bên dưới, khớp với chính nó. Ký tự NUL có thể không xuất hiện trong một mẫu. Các ký tự mẫu đặc biệt phải được trích dẫn nếu chúng được khớp với nghĩa đen.

Các ký tự mẫu đặc biệt có ý nghĩa sau:

*

Phù hợp với bất kỳ chuỗi nào, kể cả chuỗi rỗng.

?

Phù hợp với bất kỳ ký tự đơn nào.

[...]

Phù hợp với bất kỳ một trong những nhân vật kèm theo. Một cặp ký tự được phân tách bằng dấu gạch ngang biểu thị một biểu thức phạm vi ; bất kỳ ký tự nào sắp xếp giữa hai ký tự đó, bao gồm, sử dụng chuỗi đối chiếu và bộ ký tự của miền địa phương hiện tại, được khớp. Nếu ký tự đầu tiên sau [ là a ! hoặc ^ thì bất kỳ ký tự nào không được đính kèm đều được khớp. Thứ tự sắp xếp của các ký tự trong các biểu thức phạm vi được xác định bởi ngôn ngữ hiện tại và giá trị của biến shell LC_COLLATE , nếu được đặt. A - có thể được so khớp bằng cách thêm nó làm ký tự đầu tiên hoặc cuối cùng trong tập hợp. A ] có thể được so khớp bằng cách thêm nó làm ký tự đầu tiên trong tập hợp.

Trong [] , các lớp ký tự có thể được xác định bằng cách sử dụng cú pháp [: class :] , trong đó lớp là một trong các lớp sau được định nghĩa trong tiêu chuẩn POSIX.2:

alnum alpha ascii trống cntrl chữ số đồ thị in thấp hơn punct không gian từ trên xdigit
Một lớp nhân vật khớp với bất kỳ ký tự nào thuộc lớp đó. Lớp ký tự từ khớp với chữ cái, chữ số và ký tự _.

Trong [] , một lớp tương đương có thể được xác định bằng cú pháp [= c =] , khớp với tất cả các ký tự có cùng trọng số đối chiếu (như được định nghĩa bởi ngôn ngữ hiện tại) làm ký tự c .

Trong [] , cú pháp [. biểu tượng .] khớp với biểu tượng ký hiệu đối chiếu.

Nếu tùy chọn vỏ extglob được bật bằng cách sử dụng nội trang shopt , một số toán tử khớp mẫu mở rộng được nhận dạng. Trong mô tả sau đây, một danh sách mẫu là một danh sách của một hoặc nhiều mẫu được phân cách bởi | . Các mẫu tổng hợp có thể được tạo thành bằng cách sử dụng một hoặc nhiều mẫu phụ sau:

? ( danh sách mẫu )

Khớp với số không hoặc một lần xuất hiện của các mẫu đã cho

* ( danh sách mẫu )

Khớp không hoặc nhiều lần xuất hiện của các mẫu nhất định

+ ( danh sách mẫu )

Phù hợp với một hoặc nhiều lần xuất hiện của các mẫu đã cho

@ ( danh sách mẫu )

Kết hợp chính xác một trong các mẫu đã cho

! ( danh sách mẫu )

Khớp với bất kỳ thứ gì ngoại trừ một trong các mẫu đã cho

Trích dẫn xóa

Sau các mở rộng trước đó, tất cả các lần xuất hiện không được kiểm soát của các ký tự \ , '" mà không phải là kết quả của một trong các mở rộng ở trên sẽ bị xóa.

REDIRECTION

Trước khi một lệnh được thực hiện, đầu vào và đầu ra của nó có thể được chuyển hướng bằng cách sử dụng một ký hiệu đặc biệt được diễn giải bởi trình bao. Chuyển hướng cũng có thể được sử dụng để mở và đóng các tệp cho môi trường thực thi trình bao hiện tại. Các toán tử chuyển hướng sau có thể đứng trước hoặc xuất hiện ở bất kỳ đâu trong một lệnh đơn giản hoặc có thể làm theo một lệnh . Chuyển hướng được xử lý theo thứ tự chúng xuất hiện, từ trái sang phải.

Trong các mô tả sau đây, nếu số mô tả tập tin bị bỏ qua, và ký tự đầu tiên của toán tử chuyển hướng là < , chuyển hướng đề cập đến đầu vào chuẩn (bộ mô tả tập tin 0). Nếu ký tự đầu tiên của toán tử chuyển hướng là > , chuyển hướng đề cập đến đầu ra tiêu chuẩn (bộ mô tả tập tin 1).

Từ sau toán tử chuyển hướng trong các mô tả sau, trừ khi được lưu ý khác, phải chịu sự mở rộng cú đúp, mở rộng dấu ngã, mở rộng tham số, thay thế lệnh, mở rộng số học, loại bỏ trích dẫn, mở rộng tên đường dẫn và tách từ. Nếu nó mở rộng đến nhiều hơn một từ, bash báo cáo lỗi.

Lưu ý rằng thứ tự chuyển hướng là đáng kể. Ví dụ, lệnh

ls > dirlist 2 > & 1

chỉ đạo cả đầu ra tiêu chuẩn và lỗi chuẩn cho danh sách tệp, trong khi lệnh

ls 2 > & 1 > dirlist

chỉ đạo đầu ra tiêu chuẩn cho tệp tin dirlist , bởi vì lỗi chuẩn được nhân đôi như là đầu ra tiêu chuẩn trước khi đầu ra tiêu chuẩn được chuyển hướng đến dirlist .

Bash xử lý một số tên tệp đặc biệt khi chúng được sử dụng trong chuyển hướng, như được mô tả trong bảng sau:

/ dev / fd / fd

Nếu fd là một số nguyên hợp lệ, tập tin mô tả fd được nhân đôi.

/ dev / stdin

Trình mô tả tệp 0 được nhân đôi.

/ dev / stdout

Trình mô tả tệp 1 được sao chép.

/ dev / stderr

Trình mô tả tệp 2 được sao chép.

/ dev / tcp / máy chủ / cổng

Nếu máy chủ lưu trữ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng hoặc tên dịch vụ số nguyên, thì bash sẽ cố mở một kết nối TCP tới ổ cắm tương ứng.

/ dev / udp / máy chủ / cổng

Nếu máy chủ lưu trữ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng hoặc tên dịch vụ số nguyên, thì bash sẽ cố mở một kết nối UDP vào ổ cắm tương ứng.

Không thể mở hoặc tạo tệp khiến cho việc chuyển hướng thất bại.

Chuyển hướng đầu vào

Việc chuyển hướng đầu vào làm cho tệp có tên kết quả từ việc mở rộng từ được mở để đọc trên bộ mô tả tệp n hoặc đầu vào tiêu chuẩn (bộ mô tả tệp 0) nếu n không được chỉ định.

Định dạng chung cho đầu vào chuyển hướng là:

[ n ] < từ

Chuyển hướng đầu ra

Việc chuyển hướng đầu ra làm cho tệp có tên kết quả từ việc mở rộng từ được mở để viết trên bộ mô tả tệp n hoặc đầu ra tiêu chuẩn (bộ mô tả tệp 1) nếu n không được chỉ định. Nếu tập tin không tồn tại nó được tạo ra; nếu nó tồn tại, nó bị cắt ngắn thành không.

Định dạng chung cho đầu ra chuyển hướng là:

[ n ] > từ

Nếu toán tử chuyển hướng là > và tùy chọn noclobber cho nội trang được thiết lập đã được bật, chuyển hướng sẽ thất bại nếu tệp có tên là kết quả từ việc mở rộng từ tồn tại và là tệp thông thường. Nếu toán tử chuyển hướng là > | , hoặc nhà điều hành chuyển hướng là > và tùy chọn noclobber cho lệnh dựng sẵn đã đặt không được bật, chuyển hướng được thử ngay cả khi tệp được đặt theo từ tồn tại.

Đang thêm đầu ra được chuyển hướng

Việc chuyển hướng đầu ra theo kiểu này làm cho tệp có tên kết quả từ việc mở rộng từ được mở để thêm vào bộ mô tả tệp n hoặc đầu ra tiêu chuẩn (bộ mô tả tệp 1) nếu n không được chỉ định. Nếu tập tin không tồn tại nó được tạo ra.

Định dạng chung cho đầu ra phụ thêm là:

[ n ] >> từ

Chuyển hướng đầu ra chuẩn và lỗi chuẩn

Bash cho phép cả đầu ra tiêu chuẩn (bộ mô tả tập tin 1) và đầu ra lỗi chuẩn (bộ mô tả tập tin 2) được chuyển hướng đến tệp có tên là mở rộng từ với cấu trúc này.

Có hai định dạng để chuyển hướng đầu ra tiêu chuẩn và lỗi chuẩn:

&> từ

> & từ

Trong hai hình thức, thứ nhất được ưu tiên. Điều này tương đương về mặt ngữ nghĩa với

> từ 2 > & 1

Tài liệu này

Kiểu chuyển hướng này chỉ thị cho trình bao đọc đầu vào từ nguồn hiện tại cho đến khi một dòng chỉ chứa từ (không có dấu trống) được nhìn thấy. Tất cả các dòng đọc đến thời điểm đó sau đó được sử dụng như là đầu vào tiêu chuẩn cho một lệnh.

Định dạng của tài liệu này là:

<< [ - ] từ dấu phân cách ở đây

Không mở rộng tham số, thay thế lệnh, mở rộng số học hoặc mở rộng tên đường dẫn được thực hiện trên từ . Nếu bất kỳ ký tự nào trong từ được trích dẫn, dấu phân tách là kết quả của việc loại bỏ trích dẫn trên từ và các dòng trong tài liệu ở đây không được mở rộng. Nếu từ không được trích dẫn, tất cả các dòng của tài liệu ở đây phải chịu sự mở rộng tham số, thay thế lệnh và mở rộng số học. Trong trường hợp sau, chuỗi ký tự \ bị bỏ qua và \ phải được sử dụng để báo các ký tự \ , $` .

Nếu toán tử chuyển hướng là << - , thì tất cả các ký tự tab dẫn đầu sẽ bị tước khỏi các dòng đầu vào và dòng chứa dấu tách . Điều này cho phép các tài liệu ở đây trong các kịch bản shell được thụt vào theo kiểu tự nhiên.

Đây Strings

Một biến thể của tài liệu ở đây, định dạng là:

<<< từ

Từ được mở rộng và cung cấp cho lệnh trên đầu vào tiêu chuẩn của nó.

Trình mô tả tệp trùng lặp

Toán tử chuyển hướng

[ n ] <& word

được sử dụng để sao chép các mô tả tệp đầu vào. Nếu từ mở rộng đến một hoặc nhiều chữ số, bộ mô tả tệp được ký hiệu bằng n được tạo thành bản sao của bộ mô tả tệp đó. Nếu các chữ số trong từ không chỉ định một bộ mô tả tập tin mở cho đầu vào, một lỗi chuyển hướng xảy ra. Nếu từ đánh giá đến - , tập tin mô tả n được đóng lại. Nếu n không được chỉ định, đầu vào tiêu chuẩn (bộ mô tả tập tin 0) được sử dụng.

Nhà điều hành

[ n ] > & từ

được sử dụng tương tự như mô tả tập tin đầu ra trùng lặp. Nếu n không được chỉ định, đầu ra tiêu chuẩn (bộ mô tả tập tin 1) được sử dụng. Nếu các chữ số trong từ không chỉ định một bộ mô tả tập tin mở cho đầu ra, một lỗi chuyển hướng xảy ra. Như một trường hợp đặc biệt, nếu n được bỏ qua, và từ không mở rộng đến một hoặc nhiều chữ số, đầu ra tiêu chuẩn và lỗi chuẩn được chuyển hướng như được mô tả trước đây.

Di chuyển các bộ mô tả tập tin

Toán tử chuyển hướng

[ n ] <& chữ số -

di chuyển chữ số mô tả tập tin vào tập tin mô tả n , hoặc đầu vào tiêu chuẩn (bộ mô tả tập tin 0) nếu n không được chỉ định. chữ số được đóng sau khi được nhân đôi thành n .

Tương tự, toán tử chuyển hướng

[ n ] > & chữ số -

di chuyển số mô tả tập tin vào tập tin mô tả n , hoặc đầu ra tiêu chuẩn (bộ mô tả tập tin 1) nếu n không được chỉ định.

Mở phần mô tả tập tin để đọc và viết

Toán tử chuyển hướng

[ n ] <> từ

làm cho tệp có tên là mở rộng từ được mở cho cả đọc và ghi trên bộ mô tả tệp n hoặc trên bộ mô tả tệp 0 nếu n không được chỉ định. Nếu tập tin không tồn tại, nó sẽ được tạo.

KHIẾU NẠI

Bí danh cho phép chuỗi được thay thế cho một từ khi nó được sử dụng làm từ đầu tiên của một lệnh đơn giản. Shell duy trì một danh sách các bí danh có thể được thiết lập và không được thiết lập với các lệnh xây dựng bí danhunalias (xem SHELL BUILTIN COMMANDS bên dưới). Từ đầu tiên của mỗi lệnh, nếu không được bỏ phiếu, được kiểm tra xem nó có bí danh hay không. Nếu vậy, từ đó được thay thế bằng văn bản của bí danh. Tên bí danh và văn bản thay thế có thể chứa bất kỳ đầu vào shell hợp lệ nào, kể cả các siêu ký tự được liệt kê ở trên, với ngoại lệ là tên bí danh có thể không chứa = . Từ đầu tiên của văn bản thay thế được kiểm tra cho các bí danh, nhưng một từ giống hệt với một bí danh được mở rộng không được mở rộng lần thứ hai. Điều này có nghĩa là người ta có thể bí danh ls để ls -F , ví dụ, và bash không cố gắng đệ quy mở rộng văn bản thay thế. Nếu ký tự cuối cùng của giá trị bí danh là trống , thì từ lệnh tiếp theo theo bí danh cũng được kiểm tra để mở rộng bí danh.

Bí danh được tạo và liệt kê với lệnh bí danh và được xóa bằng lệnh unalias .

Không có cơ chế để sử dụng các đối số trong văn bản thay thế. Nếu các đối số là cần thiết, nên sử dụng một hàm hệ vỏ (xem các hàm CHỨC NĂNG bên dưới).

Bí danh không được mở rộng khi vỏ không tương tác, trừ khi tùy chọn shell expand_aliases được đặt bằng cách sử dụng shopt (xem mô tả về shopt theo SHELL BUILTIN COMMANDS bên dưới).

Các quy tắc liên quan đến định nghĩa và sử dụng bí danh có phần khó hiểu. Bash luôn đọc ít nhất một dòng đầu vào hoàn chỉnh trước khi thực hiện bất kỳ lệnh nào trên dòng đó. Bí danh được mở rộng khi lệnh được đọc, không phải khi lệnh được thực hiện. Do đó, một định nghĩa bí danh xuất hiện trên cùng một dòng với một lệnh khác không có hiệu lực cho đến khi dòng đầu vào kế tiếp được đọc. Các lệnh sau định nghĩa bí danh trên dòng đó không bị ảnh hưởng bởi bí danh mới. Hành vi này cũng là một vấn đề khi các hàm được thực thi. Bí danh được mở rộng khi định nghĩa hàm được đọc, không phải khi hàm được thực thi, bởi vì định nghĩa hàm là chính nó là một lệnh ghép. Kết quả là, các bí danh được định nghĩa trong một hàm không có sẵn cho đến sau khi hàm đó được thực thi. Để an toàn, luôn đặt các định nghĩa bí danh trên một dòng riêng biệt và không sử dụng bí danh trong các lệnh ghép.

Đối với hầu hết mọi mục đích, các bí danh được thay thế bởi các hàm hệ vỏ.

CHỨC NĂNG

Một hàm shell, được định nghĩa như mô tả ở trên dưới SHELL GRAMMAR , lưu trữ một loạt các lệnh để thực hiện sau này. Khi tên của hàm shell được sử dụng như một tên lệnh đơn giản, danh sách các lệnh liên kết với tên hàm đó được thực hiện. Các hàm được thực hiện trong ngữ cảnh của trình bao hiện tại; không có quá trình mới được tạo ra để giải thích chúng (tương phản với việc thực thi một kịch bản lệnh shell). Khi một hàm được thực hiện, các đối số cho hàm trở thành các tham số vị trí trong khi thực thi nó. Thông số đặc biệt # được cập nhật để phản ánh thay đổi. Thông số vị trí 0 không thay đổi. Biến FUNCNAME được đặt thành tên của hàm trong khi hàm đang thực thi. Tất cả các khía cạnh khác của môi trường thực thi shell là giống nhau giữa một hàm và người gọi của nó với ngoại lệ là bẫy DEBUG (xem mô tả của bẫy được xây dựng bên dưới SHELL BUILTIN COMMANDS bên dưới) không được kế thừa trừ khi hàm được gán thuộc tính trace ( xem mô tả về nội trang được khai báo bên dưới).

Các biến cục bộ cho hàm có thể được khai báo với lệnh nội trang cục bộ . Thông thường, các biến và giá trị của chúng được chia sẻ giữa hàm và người gọi của nó.

Nếu lệnh trả về nội trang được thực hiện trong một hàm, hàm hoàn thành và thực thi sẽ tiếp tục với lệnh tiếp theo sau khi gọi hàm. Khi một hàm hoàn thành, các giá trị của các tham số vị trí và tham số đặc biệt # được khôi phục về các giá trị mà chúng có trước khi thực thi hàm.

Các tên hàm và định nghĩa có thể được liệt kê với tùy chọn -f đối với các lệnh nội trang khai báo hoặc các kiểu nội trang. Tùy chọn -F để khai báo hoặc sắp xếp sẽ chỉ liệt kê các tên hàm. Các hàm có thể được xuất ra để các subshells tự động định nghĩa chúng với tùy chọn -f đối với nội trang dựng sẵn.

Các hàm có thể đệ quy. Không có giới hạn nào đối với số lượng các cuộc gọi đệ quy.

ĐÁNH GIÁ ARITHMETIC

Shell cho phép các biểu thức số học được đánh giá, trong một số trường hợp nhất định (xem lệnh xây dựng sẵn và mở rộng số học ). Việc đánh giá được thực hiện theo các số nguyên cố định chiều rộng mà không kiểm tra tràn, mặc dù chia cho 0 bị bẫy và bị gắn cờ là lỗi. Các toán tử và ưu tiên và tính tương hợp của chúng giống như trong ngôn ngữ C. Danh sách các toán tử sau đây được nhóm lại thành các toán tử được ưu tiên bằng nhau. Các cấp được liệt kê theo thứ tự ưu tiên giảm dần.

id id ++ -

biến sau tăng và sau giảm

id id - id

biến trước khi tăng và giảm trước

- +

trừ đi và cộng trừ

! ~

sự phủ nhận logic và bitwise

**

lũy thừa

* /%

phép nhân, chia, phần dư

+ -

cộng, trừ

<< >>

trái và phải thay đổi bitwise

<=> = <>

so sánh

==! =

bình đẳng và bất bình đẳng

&

bitwise AND

^

độc quyền bit OR

|

bitwise HOẶC

&&

logic AND

||

hợp lý HOẶC

expr ? expr : expr

đánh giá có điều kiện

= * = / =% = + = - = << = >> = & = ^ = | =

bài tập

expr1 , expr2

dấu phẩy

Các biến Shell được phép làm toán hạng; mở rộng tham số được thực hiện trước khi biểu thức được đánh giá. Trong một biểu thức, các biến shell cũng có thể được tham chiếu theo tên mà không sử dụng cú pháp mở rộng tham số. Giá trị của một biến được đánh giá dưới dạng biểu thức số học khi nó được tham chiếu. Một biến hệ vỏ không cần phải bật thuộc tính số nguyên của nó để được sử dụng trong một biểu thức.

Các hằng số có số 0 đứng đầu được hiểu là số bát phân. Một 0x hoặc 0X hàng đầu biểu thị hệ thập lục phân. Nếu không, các số có dạng [ base # ] n, trong đó base là một số thập phân giữa 2 và 64 đại diện cho cơ sở số học, và n là một số trong cơ sở đó. Nếu cơ sở # bị bỏ qua, thì cơ sở 10 được sử dụng. Các chữ số lớn hơn 9 được biểu thị bằng các chữ thường, các chữ in hoa, @ và _, theo thứ tự đó. Nếu cơ sở nhỏ hơn hoặc bằng 36, chữ thường và chữ hoa có thể được sử dụng hoán đổi cho nhau để biểu thị các số từ 10 đến 35.

Các toán tử được đánh giá theo thứ tự ưu tiên. Các biểu thức con trong ngoặc đơn được đánh giá đầu tiên và có thể ghi đè lên các quy tắc ưu tiên ở trên.

CÁC BIỆN PHÁP ĐIỀU KIỆN

Biểu thức điều kiện được sử dụng bởi [[ lệnh ghép và lệnh thử[ lệnh nội trang để kiểm tra thuộc tính tệp và thực hiện so sánh chuỗi và số học. Các biểu thức được hình thành từ các phần tử đơn nhất hoặc nhị phân sau đây. Nếu bất kỳ đối số tệp nào đối với một trong các phần tử gốc có dạng / dev / fd / n , thì khi đó tập tin mô tả n được chọn. Nếu đối số tập tin cho một trong các phần tử gốc là một / dev / stdin , / dev / stdout hoặc / dev / stderr , bộ mô tả tập tin 0, 1 hoặc 2 tương ứng, được chọn.

-tệp

Đúng nếu tệp tồn tại.

-tập tin b

Đúng nếu tập tin tồn tại và là một tập tin đặc biệt khối.

-c -tập tin

Đúng nếu tập tin tồn tại và là một tập tin đặc biệt ký tự.

-d tệp

Đúng nếu tập tin tồn tại và là một thư mục.

-tệp

Đúng nếu tệp tồn tại.

-tập tin

Đúng nếu tệp tồn tại và là tệp thông thường.

-g tập tin

Đúng nếu tập tin tồn tại và được đặt-nhóm-id.

-tập tin

Đúng nếu tập tin tồn tại và là một liên kết tượng trưng.

-k tập tin

Đúng nếu tập tin tồn tại và bit `` dính '' được thiết lập.

-p tệp

Đúng nếu tập tin tồn tại và là một ống có tên (FIFO).

-r tệp

Đúng nếu tệp tồn tại và có thể đọc được.

-s tệp

Đúng nếu tệp tồn tại và có kích thước lớn hơn 0.

-t fd

Đúng nếu fd mô tả tập tin được mở và đề cập đến một thiết bị đầu cuối.

-tập tin

Đúng nếu tệp tồn tại và bit set-user-id của nó được đặt.

-tập tin

Đúng nếu tệp tồn tại và có thể ghi được.

-x tệp

Đúng nếu tệp tồn tại và có thể thực thi được.

-O tệp

Đúng nếu tệp tồn tại và được sở hữu bởi id người dùng hiệu quả.

-G tệp

Đúng nếu tệp tồn tại và được sở hữu bởi id nhóm hiệu quả.

-L tệp

Đúng nếu tập tin tồn tại và là một liên kết tượng trưng.

-S tệp

Đúng nếu tập tin tồn tại và là một ổ cắm.

-N tệp

Đúng nếu tập tin tồn tại và đã được sửa đổi kể từ khi nó được đọc lần cuối.

tệp1 - tệp nt2

True nếu file1 là mới hơn (theo ngày sửa đổi) so với file2 , hoặc nếu file1 tồn tại và file2 thì không.

tệp1 - tệp ot2

Đúng nếu file1 cũ hơn file2 , hoặc nếu file2 tồn tại và file1 thì không.

file1 -ef file2

Đúng nếu file1file2 tham chiếu đến cùng số thiết bị và số inode.

-o optname

True nếu optname tùy chọn shell được kích hoạt. Xem danh sách các tùy chọn trong phần mô tả tùy chọn -o cho bộ dựng sẵn bên dưới.

-z chuỗi

Đúng nếu độ dài của chuỗi bằng 0.

-n Chuỗi

chuỗi

Đúng nếu chiều dài chuỗi không khác.

string1 == string2

Đúng nếu các chuỗi bằng nhau. = có thể được sử dụng thay cho == để tuân thủ nghiêm ngặt POSIX.

string1 ! = string2

Đúng nếu các chuỗi không bằng nhau.

string1 < string2

True nếu string1 sắp xếp trước chuỗi 2 theo thứ tự từ điển trong ngôn ngữ hiện tại.

string1 > string2

Đúng nếu string1 sắp xếp sau chuỗi 2 theo thứ tự từ điển trong ngôn ngữ hiện tại.

arg1 OP arg2

OP là một trong các -eq , -ne , -lt , -le , -gt , hoặc -ge . Các toán tử nhị phân số học trả về true nếu arg1 bằng, không bằng, nhỏ hơn, nhỏ hơn hoặc bằng, lớn hơn hoặc lớn hơn hoặc bằng arg2 , tương ứng. Arg1arg2 có thể là số nguyên dương hoặc âm.

MỞ RỘNG MỞ RỘNG

Khi một lệnh đơn giản được thực hiện, trình bao sẽ thực hiện các mở rộng, nhiệm vụ và chuyển hướng sau, từ trái sang phải.

1.

Các từ mà trình phân tích cú pháp đã đánh dấu là các phép gán biến (những cái trước tên lệnh) và các chuyển hướng được lưu lại để xử lý sau này.

2.

Các từ không phải là bài tập biến đổi hoặc chuyển hướng được mở rộng. Nếu bất kỳ từ nào vẫn còn sau khi mở rộng, từ đầu tiên được lấy là tên của lệnh và các từ còn lại là các đối số.

3.

Chuyển hướng được thực hiện như mô tả ở trên trong REDIRECTION .

4.

Văn bản sau khi = trong mỗi phép gán biến trải qua việc mở rộng dấu ngã, mở rộng tham số, thay thế lệnh, mở rộng số học và xóa báo giá trước khi được gán cho biến.

Nếu không có kết quả tên lệnh, các phép gán biến sẽ ảnh hưởng đến môi trường trình bao hiện tại. Nếu không, các biến sẽ được thêm vào môi trường của lệnh đã thực hiện và không ảnh hưởng đến môi trường trình bao hiện tại. Nếu bất kỳ nhiệm vụ nào cố gắng gán một giá trị cho một biến chỉ đọc, một lỗi xảy ra và lệnh thoát với một trạng thái khác không.

Nếu không có kết quả tên lệnh, chuyển hướng được thực hiện, nhưng không ảnh hưởng đến môi trường trình bao hiện tại. Lỗi chuyển hướng khiến cho lệnh thoát với trạng thái khác 0.

Nếu có một tên lệnh còn lại sau khi mở rộng, tiến hành thực hiện như mô tả dưới đây. Nếu không, lệnh thoát. Nếu một trong các mở rộng chứa lệnh thay thế, trạng thái thoát của lệnh là trạng thái thoát của lệnh thay thế cuối cùng được thực hiện. Nếu không có lệnh thay thế, lệnh thoát với trạng thái bằng không.

THỰC HIỆN COMMAND

Sau khi một lệnh được chia thành các từ, nếu nó kết quả trong một lệnh đơn giản và một danh sách tùy chọn các đối số, các hành động sau sẽ được thực hiện.

Nếu tên lệnh không chứa dấu gạch chéo, trình bao sẽ cố gắng định vị nó. Nếu có tồn tại một hàm hệ vỏ bằng tên đó, hàm đó được gọi như được mô tả ở trên trong hàm CHỨC NĂNG . Nếu tên không khớp với một hàm, trình vỏ tìm kiếm nó trong danh sách các nội trang hệ vỏ. Nếu một kết hợp được tìm thấy, nội trang dựng sẵn đó được gọi.

Nếu tên không phải là một hàm shell hay một nội trang dựng sẵn và không chứa dấu gạch chéo, hãy tìm kiếm từng phần tử của PATH cho một thư mục chứa tệp thi hành theo tên đó. Bash sử dụng bảng băm để ghi nhớ tên đường dẫn đầy đủ của các tệp thi hành (xem băm bên dưới SHELL BUILTIN COMMANDS bên dưới). Tìm kiếm đầy đủ các thư mục trong PATH chỉ được thực hiện nếu lệnh không được tìm thấy trong bảng băm. Nếu tìm kiếm không thành công, trình bao sẽ in thông báo lỗi và trả về trạng thái thoát 127.

Nếu tìm kiếm thành công, hoặc nếu tên lệnh chứa một hoặc nhiều dấu gạch chéo, trình bao sẽ thực hiện chương trình được đặt tên trong môi trường thực thi riêng biệt. Đối số 0 được đặt thành tên đã cho và các đối số còn lại cho lệnh được đặt thành các đối số đã cho, nếu có.

Nếu việc thực thi này thất bại vì tệp không ở định dạng có thể thực thi được, và tệp không phải là một thư mục, nó được giả định là một kịch bản lệnh shell , một tệp chứa các lệnh shell. Một subshell được sinh ra để thực thi nó. Subshell này khởi động lại chính nó, để hiệu ứng như thể một shell mới đã được gọi để xử lý kịch bản, ngoại trừ các vị trí của các lệnh mà cha mẹ nhớ (xem băm bên dưới SHELL BUILTIN COMMANDS ) được giữ lại bởi đứa trẻ.

Nếu chương trình là một tập tin bắt đầu bằng #! , phần còn lại của dòng đầu tiên chỉ định một thông dịch viên cho chương trình. Shell thực thi trình thông dịch được chỉ định trên các hệ điều hành không tự xử lý định dạng thực thi này. Các đối số cho trình thông dịch bao gồm một đối số tùy chọn duy nhất sau tên của trình thông dịch trên dòng đầu tiên của chương trình, tiếp theo là tên của chương trình, tiếp theo là các đối số lệnh, nếu có.

MÔI TRƯỜNG THI HÀNH MÔI TRƯỜNG

Shell có một môi trường thực thi , bao gồm:

*

các tệp mở được kế thừa bởi trình bao tại lời gọi, như được sửa đổi bởi các chuyển hướng được cung cấp cho exec được xây dựng

*

thư mục làm việc hiện tại như được thiết lập bởi cd , pushd , hoặc popd , hoặc được kế thừa bởi trình bao tại lời gọi

*

mặt nạ chế độ tạo tệp như được đặt bởi umask hoặc được kế thừa từ cha mẹ của trình bao

*

bẫy hiện tại được đặt bởi bẫy

*

các tham số shell được thiết lập bằng cách gán biến hoặc với tập hợp hoặc được kế thừa từ bố mẹ của shell trong môi trường

*

các hàm shell được định nghĩa trong quá trình thực hiện hoặc được thừa kế từ bố mẹ của trình bao trong môi trường

*

tùy chọn được kích hoạt tại lời gọi (theo mặc định hoặc với đối số dòng lệnh) hoặc theo bộ

*

tùy chọn được bật bởi shopt

*

bí danh vỏ được xác định bằng bí danh

*

các ID tiến trình khác nhau, bao gồm các ID công việc nền, giá trị $$ và giá trị của $ PPID

Khi một lệnh đơn giản khác với một hàm dựng sẵn hoặc trình bao được thực thi, nó được gọi trong một môi trường thực thi riêng biệt bao gồm những điều sau đây. Trừ khi có ghi chú khác, các giá trị được thừa hưởng từ trình bao.

*

các tệp mở của trình bao, cộng với bất kỳ sửa đổi và bổ sung nào được chỉ định bởi các chuyển hướng đến lệnh

*

thư mục làm việc hiện tại

*

mặt nạ chế độ tạo tệp

*

các biến shell được đánh dấu để xuất, cùng với các biến được xuất khẩu cho lệnh, được truyền trong môi trường

*

bẫy bị bắt bởi trình bao được đặt lại về giá trị được thừa kế từ bố mẹ của vỏ và các bẫy bị bỏ qua bởi trình bao sẽ bị bỏ qua

Một lệnh được gọi trong môi trường riêng biệt này không thể ảnh hưởng đến môi trường thực thi của trình bao.

Lệnh thay thế và các lệnh không đồng bộ được gọi trong môi trường vỏ con là một bản sao của môi trường vỏ, ngoại trừ các bẫy mà vỏ được bắt được đặt lại thành các giá trị mà vỏ được kế thừa từ cha mẹ của nó khi gọi. Các lệnh nội trang được gọi là một phần của một đường ống cũng được thực hiện trong môi trường vỏ bọc con. Các thay đổi được thực hiện cho môi trường subshell không thể ảnh hưởng đến môi trường thực thi của shell.

Nếu một lệnh được theo sau bởi một & và điều khiển công việc không hoạt động, đầu vào tiêu chuẩn mặc định cho lệnh là tệp rỗng / dev / null . Nếu không, lệnh gọi sẽ kế thừa các bộ mô tả tệp của vỏ gọi được sửa đổi bởi các chuyển hướng.

XEM THÊM

Sổ tay tham khảo Bash , Brian Fox và Chet Ramey

Thư viện Readline Gnu , Brian Fox và Chet Ramey

Thư viện Lịch sử Gnu , Brian Fox và Chet Ramey

Giao diện hệ điều hành di động (POSIX) Phần 2: Shell và Utilities , IEEE

sh (1), ksh (1), csh (1)

emacs (1), vi (1)

readline (3)