1

私のスクリプト./make_shift_ln_o_dummy.sh:

for i in  `seq -w 0 272`
do
y=0
x=1
echo $i
y=$(($i +$x))
echo $y
done

エラーメッセージを含む私の出力:算術式:EOFを期待しています:「008 +1」

000
1
001
2
002
3
003
4
004
5
005
6
006
7
007
8
008
./make_shift_ln_o_dummy.sh: 25: arithmetic expression: expecting EOF: "008 +1"

なぜそれが起こるのですか?私は何を間違っていますか?272 の出力に変更するにはどうすればよいですか?

4

3 に答える 3

4

なぜそれが起こるのですか?

bash 式エバリュエーターは先頭を見て0、8 進定数が続くが8有効な 8 進数字ではないと想定します。

のバージョン 4.2bashでは、より役立つ診断が提供されます。

$ echo $((007 + 1))
8
$ echo $((008 + 1))
bash: 008: value too great for base (error token is "008")

上記のanubhavaからの回答は、「修正方法」を示しているため、賛成しました。

于 2012-05-09T12:09:23.110 に答える
3

008は8進数です。算術式で基数10の数値を使用するように指定できます。

y=$((10#$i +$x))

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic

于 2012-05-09T14:37:16.040 に答える
2

ここで使用する必要はありませんseq。次のようなbash算術機能を使用できます。

for ((i=0; i<272; i++))
do
   y=0
   x=1
   printf "%03d\n" $i
   y=$(($i + $x))
   printf "%03d\n" $y
done
于 2012-05-09T11:53:54.003 に答える