Dalam contoh pertama Anda, $((X+1))
evaluasi ekspresi X + 1 dan perluas hasilnya, yang kemudian dikaitkan ke variabel.
Dalam contoh kedua, $((X=X+1))
penambahan X
satu ( $((X++))
juga valid dan lebih pendek, tetapi tidak harus didukung oleh shell), kemudian diperluas ke nilai baru $X
, yang merupakan argumen pertama ke perintah nol :
,. Perintah nol mengabaikan argumennya, dan hasilnya dibuang (dengan efek samping).
Saya pribadi lebih suka bentuk pertama karena tiga alasan (relatif subyektif):
- Perintah nol tidak jelas dan disalahpahami, seperti yang ditunjukkan dengan seringnya menjadi subjek pertanyaan yang membingungkan di sini.
- Bentuk pertama tampaknya lebih alami dalam hal tata bahasa shell secara keseluruhan, dan bahkan sedikit menyerupai gaya evaluasi lama.
- Bentuk pertama lebih jelas dan lebih ringkas dan tidak melibatkan perintah.
Anda harus menggunakan versi pertama jika Anda memodifikasi lingkungan hanya dari satu perintah seperti
X=$((X+1)) /usr/local/bin/something
Anda harus menggunakan formulir kedua untuk menambahkan evaluasi ke argumen secara langsung:
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
Ini memiliki efek samping yang diinginkan, menghemat satu baris, dan cukup jelas.