test.sh
for i in `seq -w 1 10`;
do
echo $(($i+10));
done
-w
で足りない桁をゼロ埋めすると
01 02 03 04 05 06 07 08 09 10
と$i
の値が回ることになるが、$(( ))を使って計算する場合は先頭が0
で始まる文字が8進数とみなされるので08
の時点でエラーとなりスクリプトが終了してしまいます。
$ bash test.sh
11
12
13
14
15
16
17
test.sh: line 4: 08: value too great for base (error token is "08")
exprのほうがいいかも?
10進数の計算が主の場合はexpr
を使っておいたほうがいいかも。
for i in `seq -w 1 10`;
do
echo `expr $i + 10`;
done
$ bash test.sh
11
12
13
14
15
16
17
18
19
20
$(( ))で便利なところ
16進数と10進数を足してみる
echo $(( 0x10 + 10 ))
26
exprだと
echo `expr 0x10 + 10 `
expr: not a decimal number: '0x10'
結論?
頭に0
がつくと8進数として解釈される事があるよと頭の隅に入れておけばなんかの時に助かるかも