bashmendefinisikan beberapa metakarakter . Dari man bash:
metacharacter
Karakter yang, ketika tidak dikutip, memisahkan kata-kata. Salah satu dari yang berikut:
| &; () <> tab spasi
Karena metakarakter memisahkan kata, tidak masalah apakah mereka dikelilingi oleh spasi. Simbol pipa |,, adalah metacharacter dan karenanya, seperti yang Anda perhatikan, tidak memerlukan spasi di sekitarnya.
Perhatikan bahwa [, ], {, }, dan =yang tidak metakarakter. Makna mereka, sebaliknya, sangat bergantung pada apakah mereka dikelilingi oleh kekosongan.
Contoh kapan ruang dan tidak diperlukan
Seperti yang Anda perhatikan, tidak masalah apakah |dikelilingi oleh ruang. Mari kita perhatikan beberapa contoh yang biasanya membingungkan pengguna bash. Mempertimbangkan:
$ (date)
Sun Mar 1 12:47:07 PST 2015
Parens di atas memaksa dateperintah untuk dijalankan dalam subkulit. Karena (dan )merupakan metakarakter, tidak diperlukan spasi. Sebaliknya:
$ {date}
bash: {date}: command not found
Karena {dan }yang tidak metakarakter, memperlakukan shell {date}sebagai satu kata. Alih-alih mencari dateperintah, itu mencari perintah bernama {date}. Karena tidak menemukan satu, hasil kesalahan.
Masalah umum lainnya adalah testperintah. Berikut ini berhasil:
$ [ abc ] && echo Yes
Yes
Hapus spasi dan terjadi kesalahan:
$ [abc] && echo Yes
bash: [abc]: command not found
Karena [dan ]yang tidak metakarakter, shell memperlakukan [.bashrc]sebagai satu kata dan hasilnya, seperti di datecontoh, adalah kesalahan.
Pernyataan penugasan juga sensitif terhadap spasi. Tugas berikut berhasil:
$ v=date
$ echo $v
date
Tambahkan spasi dan tugas gagal:
$ v= date
Sun Mar 1 12:55:05 PST 2015
Di atas, shell untuk sementara vmengosongkan dan menjalankan dateperintah.
Tambahkan spasi sebelum =juga menyebabkan kegagalan tetapi karena alasan yang berbeda:
$ v =date
bash: v: command not found
Di sini, shell mencoba mengeksekusi perintah vdengan argumen =date. Kesalahannya adalah karena tidak ditemukan perintah bernama v.