Shell có thể biến đổi dòng lệnh trước khi thực hiện lệnh. Cả vỏ và grep
có thể sử dụng trích dẫn để loại bỏ ý nghĩa đặc biệt của một số ký tự. Tuy nhiên, grep
và vỏ có các ký tự đặc biệt khác nhau. Ngoài ra, các ký tự đặc biệt không thoát khỏi kết quả của một bản mở rộng hiện có sẽ bị xóa, trước khi thực thi lệnh, bằng shell.
echo '[]' | grep '[]'
Shell truyền đối số []
tới grep
và nó được phân tích cú pháp dưới dạng biểu thức ngoặc không đúng grep
.
echo '[]' | grep \[]
Ở trên, chúng ta có thể thấy một trường hợp tương tự. Dấu gạch chéo ngược được loại bỏ và []
được truyền dưới dạng đối số grep
. grep
nhận ra một biểu thức khung không đúng.
echo '[]' | grep '\[]'
Cuối cùng, trong trường hợp này, các trích dẫn được loại bỏ bởi shell và \[]
được truyền dưới dạng đối số đến grep
, nhưng trong trường hợp cụ thể này, \[
được hiểu grep
là một dấu ngoặc. Các trích dẫn là cần thiết để ngăn chặn việc giải thích dấu gạch chéo ngược như là một ký tự đặc biệt của trình bao.
Specification Đặc điểm kỹ thuật POSIX .
bash
bao gồm),!
vẫn được mở rộng trong dấu ngoặc kép, chỉ các dấu ngoặc đơn sẽ dừng việc mở rộng của nó (hoặc tắt tùy chọn shell).