Saya tahu bahwa kita dapat melarikan diri karakter khusus seperti *(){}$
dengan \
sehingga dapat dianggap literal.
Misalnya \*
atau\$
Tetapi dalam kasus .
saya harus melakukannya dua kali, seperti \\.
kalau tidak itu dianggap karakter khusus. Contoh:
man gcc | grep \\.
Kenapa gitu?
shell-script
grep
regular-expression
quoting
escape-characters
Pengguna Terdaftar
sumber
sumber
man bash|grep \\.
bisa jadi contoh.man gcc | grep '\.'
.Jawaban:
Secara umum, Anda hanya perlu melarikan diri satu kali untuk membuat karakter khusus dianggap literal. Kadang Anda harus melakukannya dua kali, karena pola Anda digunakan oleh lebih dari satu program.
Biarkan diskusikan contoh Anda:
Perintah ini diinterpretasikan oleh dua program,
bash
interpreter dangrep
. Penyebab pelarian pertamabash
tahu\
adalah literal, jadi yang kedua adalah lolosgrep
.Jika Anda melarikan diri hanya satu kali,
\.
,bash
akan tahu titik ini literal, dan lulus.
untukgrep
. Ketikagrep
melihat ini.
, ia mengira titik adalah karakter khusus, bukan literal.
Jika Anda melarikan diri dua kali,
bash
akan melewati pola\.
untukgrep
. Sekaranggrep
ketahuilah bahwa itu adalah titik literal.sumber
grep \\. my_file
. Baris perintah ditafsirkan oleh shell, menggunakan yang pertama\
untuk melarikan diri yang kedua, sehingga orang\
dilewatkan secara harfiah untuk grep. Titik.
ini tidak khusus untuk shell, jadi itu tetap kata demi kata. Grep kemudian membaca (tunggal)\
dan menggunakannya untuk menghindari titik.
.echo .
di bash saja ... gema.
karakter bach .