Secara historis , cangkang Bourne tidak memiliki true
dan false
sebagai perintah bawaan. true
bukan hanya alias :
, dan false
untuk sesuatu seperti let 0
.
:
sedikit lebih baik daripada true
untuk portabilitas ke shell yang diturunkan dari Bourne kuno. Sebagai contoh sederhana, pertimbangkan untuk tidak memiliki !
operator pipa atau ||
operator daftar (seperti halnya beberapa cangkang Bourne kuno). Ini meninggalkan else
klausa if
pernyataan sebagai satu-satunya cara untuk bercabang berdasarkan status keluar:
if command; then :; else ...; fi
Karena if
memerlukan then
klausa non-kosong dan komentar tidak dihitung sebagai non-kosong, :
berfungsi sebagai larangan.
Saat ini (yaitu: dalam konteks modern) Anda biasanya dapat menggunakan salah satu :
atau true
. Keduanya ditentukan oleh POSIX, dan beberapa menemukan true
lebih mudah dibaca. Namun ada satu perbedaan yang menarik: :
adalah yang disebut POSIX khusus built-in , sedangkan true
adalah biasa built-in .
Dibangun khusus harus dibangun ke dalam shell; Built-in biasa hanya "biasanya" built-in, tetapi tidak dijamin sepenuhnya. Seharusnya tidak ada program reguler yang dinamai :
dengan fungsi true
di PATH dari kebanyakan sistem.
Mungkin perbedaan yang paling penting adalah bahwa dengan built-in khusus, variabel apa pun yang ditetapkan oleh built-in - bahkan di lingkungan selama evaluasi perintah sederhana - tetap ada setelah perintah selesai, seperti yang ditunjukkan di sini menggunakan ksh93:
$ unset x; ( x=hi :; echo "$x" )
hi
$ ( x=hi true; echo "$x" )
$
Perhatikan bahwa Zsh mengabaikan persyaratan ini, seperti halnya GNU Bash kecuali ketika beroperasi dalam mode kompatibilitas POSIX, tetapi semua shell "POSIX sh turunan" utama lainnya mengamati ini termasuk dash, ksh93, dan mksh.
Perbedaan lainnya adalah built-in reguler harus kompatibel dengan exec
- ditunjukkan di sini menggunakan Bash:
$ ( exec : )
-bash: exec: :: not found
$ ( exec true )
$
POSIX juga secara eksplisit mencatat bahwa :
mungkin lebih cepat daripada true
, meskipun ini tentu saja detail implementasi khusus.