Saya tidak terlalu banyak membuat skrip shell, jadi saya sedikit terkejut ketika saya membaca dokumentasi untukgit submodule
dan saya melihat sintaks yang mereka gunakan dalam dokumentasi ini:
Pengembalian yang tidak nol dari perintah dalam submodule apa pun menyebabkan pemrosesan berakhir. Ini bisa diganti dengan menambahkan
|| :
ke akhir perintah.
Saya harus mencari yang || :
merupakan singkatan untuk memaksa perintah untuk keluar dengan sukses. Kapan saja saya harus membuat perintah keluar dengan sukses, saya menggunakan || true
. Apakah || :
dianggap lebih idiomatis?
||:
(tanpa ruang) juga berlaku di bash. Itu melakukan hal yang sama dengan|| :
atau|| true
.Jawaban:
true
tidak dibangun ke dalam shell Bourne.:
selalu (itu adalah cara untuk memasukkan komentar sebelum#
diperkenalkan).Itu, dan karena itu lebih pendek untuk jenis mungkin adalah alasan utama orang memilih
:
lebihtrue
.Perhatikan perbedaan lain dalam shell POSIX (untuk
bash
, hanya dalam mode POSIX): sementaratrue
builtin biasa (bahkan tidak harus builtin),:
adalah builtin khusus . Itu memiliki beberapa implikasi, yang sebagian besar tidak mungkin berdampak pada kasus khusus ini:Jika suatu
:
perintah gagal, termasuk karena pengalihan yang gagal, itu menyebabkan shell keluar. Dalam praktiknya, itu mungkin tidak akan membuat perbedaan kecuali Anda meneruskan pengalihan:
di
var=value :
,var
tetap disetel kevalue
setelah:
pengembalian, bukan dalam kasustrue
:Juga mencatat bahwa
|| true
karya-karya di kerang darirc
dancsh
keluarga tetapi tidak|| :
(tapi tidak untuk membatalkanset -e
dicsh
).|| :
tidak sama dengan:
. Ini berarti atau menjalankan:
sebaliknya (yaitu, jika pipa sebelumnya gagal).Akan menyebabkan shell keluar karena
set -e
danfalse
memiliki status keluar yang tidak nol (gagal). Theset -e
efek dibatalkan jika perintah yang kembali status exit non-nol digunakan sebagai kondisi seperti di:false && :
hanya membatalkanset -e
.false || :
membatalkanset -e
dan mengatur status keluar menjadi0
lebih idiomatis untuk mengatakan bahwa kami ingin mengabaikan kode keluar kegagalan perintah. Sebagian besar akan berpendapat bahwa|| true
itu lebih terbaca (menyampaikan niat lebih jelas).sumber
&& :
brilian, apakah ada dokumen atau bacaan lebih lanjut tentang ini? Google gagal pada saya mencoba menemukan kata kunci semacam ini ...Secara umum, dalam bash, titik dua
:
dantrue
setara.Saya pikir ini didasarkan pada konteksnya .
Jika Anda ingin
return value
, ataucondition
selalu benar, Anda harus menggunakantrue
kata kunci, itu akan membuat kode Anda lebih jelas dan membiarkan pemirsa tahu bahwa Anda ingin menekankan nilai yang benar , yaitu:atau
Dan jika Anda tidak ingin melakukan apa pun , atau
NOP
menggunakan shell, Anda harus menggunakan titik dua:
atau
sumber
Sebagian besar respons ini gagal mengatasi penggunaan paling umum dari
:
.Pertama, diskusi ini tidak terkait dengan shell yang bukan turunan shell Bourne (
sh
). Yang mengatakan, semua cangkang turunan Bourne melihattrue
dan:
sebagai hal yang sama. Programmer dulunya didorong untuk menggunakan:
daripadatrue
, karena:
selalu built-in sementara dulu ada kasus di manatrue
tidak selalu built-in.:
memiliki dua kegunaan. Ini bukan sinonim untuk#
, tetapi memiliki fungsi yang berbeda. Saat debugging skrip Anda di bawah aset -x
, baris tempat#
digunakan dijatuhkan oleh parser dan benar-benar diabaikan, sedangkan baris dengan:
diuraikan dan dievaluasi. Ini sangat berguna dalam debugging karena di bawah-x
baris tersebut ditampilkan dan nilainya setelah evaluasi ditampilkan. Ini seperti menempatkanprint
pernyataan dalam kode Anda yang hanya ditampilkan dalam-x
mode. Hati-hati dengan nilai setelahnya:
karena itu adalah kode asli dan efek sampingnya dapat memengaruhi program Anda.sumber