Saya menulis naskah kecil hari ini yang berisi
grep -q ^local0 /etc/syslog.conf
Selama peninjauan, seorang rekan kerja menyarankan agar ^local0
dikutip karena ^
berarti "pipa" di kulit Bourne. Terkejut dengan klaim ini, saya mencoba melacak referensi yang menyebutkan hal ini. Tidak ada yang saya temukan di internet menyarankan ini adalah masalah.
Namun, ternyata implementasi bsh
(yang mengklaim sebagai Bourne shell) pada AIX 7 sebenarnya memiliki perilaku ini:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Tidak satu pun dari implementasi "cangkang Bourne" lainnya yang saya coba lakukan dengan cara ini (yaitu, ^
tidak dianggap sebagai metacharacter shell sama sekali). Saya mencoba sh
CentOS (yang benar-benar bash), dan sh
pada FreeBSD (yang bukan bash). Saya tidak punya banyak sistem lain untuk dicoba.
Apakah perilaku ini diharapkan? Kerang mana yang dianggap ^
sebagai metacharacter pipa?
[ x"$foo" = x"bar" ]
.
bsh
itu bukan Shell Bourne. Nama ini disalahgunakan untuk Bourne Shell di AIX saja. bsh
lebih merupakan shell yang diperkenalkan oleh saya pada tahun 1984 di H.Berhold AG pada UNOS (klon UNIX pertama). Perhatikan bahwa AIX tidak ada pada tahun 1984.
^
adalah karakter negasi di zsh dan juga di ruang regex. Sebagai komentar terpisah, umumnya disarankan untuk menggunakan tanda kutip tunggal dalam ekspresi grep untuk portabilitas di seluruh shell.