Shell dapat mengubah baris perintah sebelum eksekusi perintah. Baik shell dan grep
dapat menggunakan mengutip untuk menghapus arti khusus dari beberapa karakter. Meskipun demikian, grep
dan kerang memiliki karakter khusus yang berbeda. Selain itu, karakter khusus yang tidak terhapuskan yang tidak dihasilkan dari ekspansi yang ada dihapus, sebelum eksekusi perintah, oleh shell.
echo '[]' | grep '[]'
Shell mentransmisikan argumen []
ke grep
dan diuraikan sebagai ekspresi braket salah oleh grep
.
echo '[]' | grep \[]
Di atas, kita bisa melihat kasus serupa. Garis miring terbalik dihapus dan []
dikirim sebagai argumen untuk grep
. grep
mengenali ekspresi braket yang salah.
echo '[]' | grep '\[]'
Akhirnya, dalam kasus ini, tanda kutip dihapus oleh shell dan \[]
ditransmisikan sebagai argumen untuk grep
tetapi, dalam kasus khusus ini ¹, \[
ditafsirkan grep
sebagai braket literal. Kutipan diperlukan untuk mencegah interpretasi backslash sebagai karakter khusus oleh shell.
¹ Spesifikasi POSIX .
bash
termasuk),!
masih diperluas dalam tanda kutip ganda, hanya tanda kutip tunggal yang akan menghentikan ekspansi (atau mematikan opsi shell).