Bash memperlakukan built-in timesebagai kasus khusus, saat mem-parsing baris perintah.
Seperti yang dapat dibaca di bash manpage, baris yang diketik pertama-tama dibagi menjadi daftar:
pipeline ; pipeline
di mana sebuah pipa adalah:
[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]
atau dalam kasus kami, cukup:
time command
yaitu jika waktu hadir, maka perintah harus juga hadir.
[Ada kasus khusus yang memungkinkan timeuntuk diikuti oleh baris baru, tetapi itu tidak berlaku di sini]
Jadi, dalam kasus kami, kami memiliki:
time;date
dipecah menjadi dua jalur pipa:
1. time
2. date
dan pipa 1 tidak terbentuk dengan baik, karena kita punya timetanpa perintah. Karena itu kesalahannya.
Perhatikan bahwa baris perintah timejuga tidak berfungsi di sini:
$ /usr/bin/time;date
Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose]
bash mem-parsing ini seperti yang diharapkan, ke dalam 2 jalur pipa:
1. /usr/bin/time
2. date
dan /usr/bin/timekemudian menolak untuk berjalan tanpa argumen. Perhatikan bahwa ini adalah kesalahan /usr/bin/timebukan kesalahan dari bash.
Alasan bahwa back-tick berfungsi adalah bahwa back-tick berhenti timeditafsirkan sebagai elemen khusus dalam pipa.
yaitu dengan back-tick:
`time`;date
itu diurai sebagai dua pipa:
1. `time`
2. date
Ingatlah bahwa saluran pipa, dalam kasus kami, adalah:
[time] command
dan masalahnya pada awalnya adalah bahwa kami memiliki timetanpa perintah, yang tidak diizinkan. Tetapi sekarang kita hanya memiliki perintah:
`time`
tanpa sebelumnya time, karena back-ticks berarti timeditafsirkan sebagai perintah, bukan sebagai kata sebelumnya.
Jadi bash kemudian menjalankan builtin-nya timetanpa argumen, yang diterima. Tidak menghasilkan output, dan kami tidak melihat kesalahan.
Perhatikan bahwa:
`time`
sebenarnya menjalankan hasil dari timebuilt-in, yaitu menjalankan apa pun yang timedihasilkan built-in pada stdout. Tetapi karena timedengan sendirinya tidak menulis apa pun untuk stdout, tampaknya bekerja.
Akhirnya, telah dicatat bahwa ini bekerja:
time ; ; date
yang saya tidak bisa jelaskan, sayangnya :)
time;datevsdate;time. Ini tampaknya menjadi masalah dengan pipeline inbashdan char terakhir yang dihasilkan dengantimeoutput. Hasil yang diuji di emulator terminal berbeda adalah: - [Bash] $ date; time # [OK] $ time; date # [ NotOK ] bash: kesalahan sintaks dekat token tak terduga `date '$ error hanya kesalahan # waktu saja tidak muncul bahwa itu adalah hasil dari tanggal apa pun. - [Csh] $ date; waktu # [OK] $ waktu; tanggal # [OK] - [Tcsh] $ date; waktu # [OK] $ waktu; tanggal # [OK] - [Ksh] $ tanggal; waktu # [ OK] $ waktu; tanggal # [OK]