Jika saya menulis yang berikut ini ke terminal bash:
A="0012"
B=$((A+1))
echo $B
Saya mendapatkan 11, Tidak 13 seperti yang saya harapkan !!!!!
Saya sudah googled di sekitar dan saya tidak bisa menjelaskannya sama sekali, atau mencari tahu bagaimana saya bisa mendapatkan nomor yang bertambah. (Saya sebenarnya ingin berakhir dengan B = "0013" dan menambah satu setiap kali karena saya menggunakan ini sebagai awalan untuk cadangan saya)
Jawaban:
Itu karena angka yang diawali dengan
0
diperlakukan sebagai Oktal olehbash
, maka ia melakukan penambahan Octal (Basis 8). Untuk mendapatkan tambahan desimal untuk struktur ini, Anda perlu mendefinisikan Basis secara eksplisit atau tidak menggunakan00
semuanya.Untuk Desimal, Base adalah 10, dilambangkan dengan
10#
:sumber
Anda dapat mencoba perintah ini untuk mendapatkan jawabannya:
Informasi lebih lanjut tentang
bc
perintah dapat ditemukan di sini .bc
halaman manual:sumber
echo
dan sebuah pipa, Anda bisa menggunakan sintaks Bash "di sini string". Efeknya sama, tetapi IMHO "di sini string" lebih indah:bc <<< "$A + 1"
:-)bc
perintah di sampinghere
tautan akan sangat membantu.Metode alternatif mungkin untuk menjaga variabel Anda sebagai bilangan bulat dan mengubahnya menjadi string di akhir:
Gaya ini bekerja dengan bilangan bulat dalam matematika dan mengkonversi ke string untuk jawabannya lebih intuitif bagi saya karena saya terbiasa dengan pemrograman BASIC. Saya menghargai Bash tidak memiliki variabel mengetik seperti C dan BASIC tetapi berpura-pura itu membuat saya bahagia.
sumber
A="0012"; A=$((10#$A))