Kí tự đặc biệt
Một số ký tự được Bash xem là không có ngữ nghĩa. Thay vào đó, các ký tự này thực hiện một chỉ dẫn đặc biệt hoặc có ý nghĩa thay thế; chúng được gọi là "ký tự đặc biệt", hoặc "ký tự meta".
Dưới đây là một số cách sử dụng các ký tự đặc biệt phổ biến nhất:
Char | Description |
---|---|
" " | Whitespace —- có thể là một tab, dòng mới, tab dọc, nguồn cấp dữ liệu cho biểu mẫu, dấu xuống dòng (carriage return) hoặc dấu cách. Bash sử dụng khoảng trắng để xác định vị trí các từ bắt đầu chuỗi và kết thúc chuỗi. Từ đầu tiên là tên lệnh và các từ bổ sung trở thành đối số cho lệnh đó. |
$ | Expansion —- là các loại mở rộng khác nhau: mở rộng tham số (ví dụ: $var hoặc ${var}), thay thế lệnh (ví dụ: $(command)) hoặc mở rộng số học (ví dụ: $((biểu thức))). Còn nhiều các bản mở rộng khác. |
'' | Single quotes —- sẽ bảo vệ văn bản bên trong 2 dấu nháy đơn để nó có ngữ nghĩa. Với chúng, thông thường bất kỳ loại diễn giải nào của Bash đều bị bỏ qua: các ký tự đặc biệt được bỏ qua và nhiều từ sẽ bị ngăn cho không tách rời. |
"" | Double quotes —- sẽ bảo vệ văn bản bên trong 2 dấu ngoặc kép không bị tách thành nhiều từ hoặc nhiều đối số, nhưng vẫn cho phép xảy ra việc thay thế; ngữ nghĩa của hầu hết các ký tự đặc biệt khác thường bị ngăn cản. |
\ | Escape —- (backslash) ngăn ký tự tiếp theo làm nó được hiểu là một ký tự đặc biệt. Điều này hoạt động bên ngoài các dấu nháy, bên trong dấu ngoặc (nháy) kép và thường bị bỏ qua nếu trong dấu nháy đơn. |
# | Commen —- ký tự # bắt đầu một comment kéo dài đến cuối dòng. Comment là ghi chú giải thích và không được xử lý bởi shell. |
= | Assignment —- gán giá trị cho một biến (ví dụ: logdir = /var/log/myprog). Khoảng trắng không được phép ở hai bên của ký tự =. |
[[ ]] | Test —- đánh giá một biểu thức điều kiện để xác định xem nó là "true" hay "false". Việc kiểm tra được sử dụng trong Bash để so sánh các chuỗi, kiểm tra sự tồn tại của một tệp, v.v. Phần này sẽ được đề cập sau. |
! | Negate —- được sử dụng để phủ định hoặc đảo ngược trạng thái kiểm tra hoặc thoát. Ví dụ: ! grep text file; exit $?. |
>, >>, < | Redirection —- chuyển hướng đầu ra hoặc đầu vào của lệnh vào một tệp. Chuyển hướng sẽ được đề cập sau. |
; | Command separator —- dùng để tách nhiều lệnh nằm trên cùng một dòng. |
{ } | Inline group —- các lệnh bên trong dấu ngoặc nhọn được xử lý như thể chúng là một lệnh. Thật tiện khi sử dụng chúng vì cú pháp Bash chỉ yêu cầu một lệnh và một hàm không được bảo đảm. |
( ) | Subshell group —- tương tự như trên nhưng các lệnh bên trong được thực thi trong một shell (một quy trình mới). Được sử dụng giống như một sandbox, nếu một lệnh gây ra các tác dụng phụ (như thay đổi các biến), nó sẽ không có tác dụng đối với trình shell hiện tại. |
(( )) | Arithmetic expression —- với một biểu thức số học, các ký tự như +, -, * và / là các toán tử toán học được sử dụng để tính toán. Chúng có thể được sử dụng cho các phép gán biến như ((a = 1 + 4)) cũng như các bài kiểm tra như if ((a <b)). Sẽ nói thêm về điều này sau. |
$(( )) | Arithmetic expansion —- Giống như trên, nhưng biểu thức được thay thế bằng kết quả số học của nó. Ví dụ: echo "The average is $(( (a+b)/2 ))” . |
*, ? | Globs —- các ký tự "wildcard" khớp với các phần của tên tệp (ví dụ: ls * .txt). |
~ | Home directory —- dấu ngã là đại diện của thư mục chính. Khi ở một mình hoặc theo sau bởi dấu /, nó có nghĩa là thư mục chính của người dùng hiện tại; mặt khác, tên người dùng phải được chỉ định (ví dụ: ls ~/Documents; cp ~john/.bashrc.). |
& | Background —- khi được sử dụng ở cuối một lệnh, nó sẽ chạy lệnh đó trong nền (không đợi nó hoàn thành). |
Các ký tự đặc biệt không được dùng nữa
(được công nhận, nhưng không được khuyến nghị)
Chúng không được khuyến khích sử dụng, nhưng thường xuất hiện trong các tập lệnh cũ hơn hoặc các tập được viết không tốt.
Char | Description |
---|---|
`` | Command substitution - sử dụng $() để thay thế. |
[ ] | Test - một bí danh cho lệnh kiểm tra cũ. Thường được sử dụng trong các tập lệnh shell POSIX. Thiếu nhiều tính năng của [[]]. |
$[ ] | Arithmetic expression - sử dụng $(()) để thay thế. |