我的脚本./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?
答案 0 :(得分:4)
008是八进制数。您可以指定要在算术表达式中使用基数为10的数字:
y=$((10#$i +$x))
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
答案 1 :(得分:3)
此处无需使用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
答案 2 :(得分:3)
为什么会这样?
bash表达式求值程序看到前导0
并假定八进制常量将会跟随,但8
不是有效的八进制数字。
bash
的4.2版提供了更有用的诊断:
$ echo $((007 + 1))
8
$ echo $((008 + 1))
bash: 008: value too great for base (error token is "008")
上面的回答from anubhava给出了“如何修复”,这就是我对其进行投票的原因。