Titik koma dalam struktur bersyarat


35

Mengapa menempatkan tanda koma di satu dan tidak di yang lain?

Hasilnya sama

Kode satu

if [ "a" == "a" ]
then
 echo "true"
fi

Kode dua

if [ "a" == "a" ];
then
 echo "true";
fi

Titik koma dalam kode kedua tidak perlu?

Kapan perlu menempatkan titik koma?


2
Ini telah dijawab dengan cukup dan benar, tetapi saya ingin memberi tahu OP juga; ganti saja setiap akhir baris, sehingga Anda dapat menggabungkan dua perintah menjadi satu baris, misalnya:svn up; make
Aaron D. Marasco

1
Perhatikan juga bahwa dua titik koma ;;digunakan untuk memisahkan kecocokan dalam pernyataan kasus. ;;diperlukan di sini, bukan opsional .... tetapi ;;bukan hal yang sama dengan ;atau ; ;, itu hanya terlihat seperti itu. Semi-titik dua tunggal ;berfungsi seperti biasa di bagian PERINTAH dari pernyataan kasus.
cas

Jawaban:


31

Titik koma dibutuhkan hanya ketika ujung garis tidak ada:

if [ "a" == "a" ] ; then echo "true" ; fi

Tanpa titik koma, Anda mendapatkan kesalahan Sintaks.

Saya tidak mengerti pertanyaan Anda tentang penawaran. Bisakah Anda lebih spesifik?

(Dan omong-omong, menggunakan =bukannya ==lebih portabel dan POSIX compliant).


Kutipan dalam kode kedua tidak perlu?
Jhonathan

2
Semua kutipan di kedua sampel tidak perlu.
choroba

6

Titik koma sering digunakan, karena beberapa orang (misalnya saya) menyukai gaya seperti ini:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Jadi, jika kata kunci-kemudian ditempatkan pada baris-kondisi maka perlu karena perintah baru dimulai, seperti yang ditulis oleh choroba.

Mengenai tanda kutip di kondisi-cek mereka sering digunakan dengan variabel untuk memastikan tidak ada pengecualian terjadi jika tidak ada yang diberikan ke variabel. Ini adalah gaya yang lebih aman dan terlihat tidak perlu, tetapi bahkan dalam pemrograman shell dari waktu ke waktu membuat proses program meskipun konten tidak dapat ditugaskan ke variabel. Maka perintah masih berfungsi karena string kosong dibandingkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.