bash
định nghĩa một số siêu ký tự . Từ man bash
:
metacharacter
Một ký tự mà khi không được trích dẫn sẽ phân tách các từ. Một trong những điều sau đây:
| &; () <> tab không gian
Bởi vì các ký tự phân tách các từ riêng biệt, việc chúng được bao quanh bởi các khoảng trắng không quan trọng. Biểu tượng ống |
, là một metacharacter và do đó, như bạn nhận thấy, nó không cần khoảng trống xung quanh nó.
Lưu ý rằng [
, ]
, {
, }
, và =
là không metacharacters. Ý nghĩa của chúng, ngược lại, phụ thuộc mạnh mẽ vào việc chúng được bao quanh bởi khoảng trống.
Ví dụ về khi không gian là và không cần thiết
Như bạn nhận thấy, không có vấn đề gì nếu |
được bao quanh bởi các không gian. Chúng ta hãy xem xét một số ví dụ thường gây nhầm lẫn cho người dùng bash. Xem xét:
$ (date)
Sun Mar 1 12:47:07 PST 2015
Các parens ở trên buộc date
lệnh phải được chạy trong một subshell. Bởi vì (
và )
là siêu nhân vật, không cần khoảng trắng. Ngược lại:
$ {date}
bash: {date}: command not found
Vì {
và không phải}
là siêu ký tự, shell được coi là một từ. Thay vì tìm kiếm lệnh, nó tìm kiếm một lệnh có tên . Bởi vì nó không tìm thấy một, một kết quả lỗi.{date}
date
{date}
Một vấn đề phổ biến khác là test
lệnh. Sau đây hoạt động thành công:
$ [ abc ] && echo Yes
Yes
Xóa các khoảng trắng và xảy ra lỗi:
$ [abc] && echo Yes
bash: [abc]: command not found
Bởi vì [
và không phải]
là siêu ký tự, shell xử lý như một từ đơn và kết quả, giống như trong ví dụ, là một lỗi.[.bashrc]
date
Báo cáo chuyển nhượng cũng nhạy cảm với không gian. Nhiệm vụ sau đây thành công:
$ v=date
$ echo $v
date
Thêm một khoảng trắng và gán không thành công:
$ v= date
Sun Mar 1 12:55:05 PST 2015
Trong phần trên, shell tạm thời đặt v
thành rỗng và sau đó thực thi date
lệnh.
Thêm một khoảng trắng trước =
cũng gây ra lỗi nhưng vì một lý do khác:
$ v =date
bash: v: command not found
Ở đây, shell cố gắng thực thi lệnh v
với đối số =date
. Lỗi là do không tìm thấy lệnh nào được đặt tên v
.