bash
mendefinisikan 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 date
perintah 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 date
perintah, itu mencari perintah bernama {date}
. Karena tidak menemukan satu, hasil kesalahan.
Masalah umum lainnya adalah test
perintah. 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 date
contoh, 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 v
mengosongkan dan menjalankan date
perintah.
Tambahkan spasi sebelum =
juga menyebabkan kegagalan tetapi karena alasan yang berbeda:
$ v =date
bash: v: command not found
Di sini, shell mencoba mengeksekusi perintah v
dengan argumen =date
. Kesalahannya adalah karena tidak ditemukan perintah bernama v
.