Đầu tiên, lưu ý rằng dấu gạch chéo đơn khớp quá nhiều:
$ echo $'eegg \n e.g.' | grep e\.g\.
eegg
e.g.
Theo như Bash có liên quan, một khoảng thời gian thoát cũng giống như một khoảng thời gian. Bash vượt qua giai đoạn để grep . Đối với grep, một khoảng thời gian phù hợp với bất cứ điều gì.
Bây giờ, hãy xem xét:
$ echo $'eegg \n e.g.' | grep e\\.g\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\.g\\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\\.g\\\\.
$
Khi Bash nhìn thấy một dấu gạch chéo kép, sẽ giảm nó thành một dấu gạch chéo và chuyển nó vào grep, trong lần đầu tiên trong ba thử nghiệm ở trên, sẽ thấy, như chúng ta muốn, một dấu gạch chéo trước một khoảng thời gian. Vì vậy, điều này làm đúng.
Với một dấu gạch chéo ba, Bash giảm hai dấu đầu tiên thành một dấu gạch chéo. Sau đó nó thấy \.
. Vì một thời kỳ trốn thoát không có ý nghĩa đặc biệt với Bash, nên điều này được giảm xuống thành một thời kỳ đơn giản. Kết quả là grep thấy, như chúng ta muốn, một dấu gạch chéo trước một khoảng thời gian.
Với bốn dấu gạch chéo, Bash giảm mỗi cặp thành một dấu gạch chéo. Bash truyền lại cho grep hai dấu gạch chéo và một khoảng thời gian. grep nhìn thấy hai dấu gạch chéo và dấu chấm và giảm hai dấu gạch chéo thành một dấu gạch chéo theo nghĩa đen . Trừ khi đầu vào có một dấu gạch chéo theo sau bởi bất kỳ ký tự nào, không có kết quả khớp.
Để minh họa điều cuối cùng, hãy nhớ rằng bên trong dấu ngoặc đơn, tất cả các ký tự đều theo nghĩa đen. Do đó, với ba dòng đầu vào sau, lệnh grep chỉ khớp với dòng có dấu gạch chéo trong đầu vào:
$ echo 'eegg
e.g.
e\.g\.' | grep e\\\\.g\\\\.
e\.g\.
Tóm tắt hành vi của Bash
Đối với Bash, các quy tắc là
Hai dấu gạch chéo được giảm xuống một dấu gạch chéo.
Một dấu gạch chéo trước một ký tự bình thường, giống như một dấu chấm, chỉ là ký tự bình thường (dấu chấm).
Như vậy:
$ echo \. \\. \\\. \\\\.
. \. \. \\.
Có một cách đơn giản để tránh tất cả sự nhầm lẫn này: trên dòng lệnh Bash, các biểu thức thông thường nên được đặt trong dấu ngoặc đơn. Trong dấu ngoặc đơn, Bash để mọi thứ một mình.
$ echo '\. \\. \\\. \\\\.' # Note single-quotes
\. \\. \\\. \\\\.
\\\.
và đưa grep\.
nhưng không được. câu hỏi hay