有人知道为什么这个循环迭代的次数比它应该少两倍
这是代码:
var1='000000001010111111111010101011111111111110101110'
var2='1010111111111010101011111111111111111111'
if [[ ${#var1} -gt ${#var2} ]] ; then
for (( vb2=0 ; vb2<$((${#var1} - ${#var2})) ; vb2++ )) ; do
var2=0"$var2"
done
fi
echo $var1
echo $var2
我真的很感激任何帮助
答案 0 :(得分:2)
问题是循环索引和循环结束点随着for
循环的每次迭代而改变。
以下代码更简单。它使用单个if
循环替换for
语句和while
语句:
var1='000000001010111111111010101011111111111110101110'
var2='1010111111111010101011111111111111111111'
while ((${#var1} - ${#var2} > 0))
do
var2=0"$var2"
done
echo $var1
echo $var2
答案 1 :(得分:1)
我认为这是因为这一部分:
vb2<$((${#var1} - ${#var2}))
进行比较时,您将再次重新评估var2的长度。你真正想做的是在循环之前设置一次,例如
...
diff=$(( ${#var1} - ${#var2} ))
for (( vb2=0 ; vb2<$diff ; vb2++ )) ; do
...
printf
可能是更好的方法。这是一个printf示例:
var1='000000001010111111111010101011111111111110101110'
var2='1010111111111010101011111111111111111111'
if [[ ${#var1} -gt ${#var2} ]] ; then
diff=$(( ${#var1} - ${#var2} ))
var2=$( printf "%0${diff}d%s" 0 $var2 )
fi
echo $var1
echo $var2