星期一, 2月 08, 2010

bash裡的進制轉換

之前朋友問說為什麼 010 不是 10? 我告訴他這是因為這樣的數字會被認定為八進位,像很多語言(如C語言)也有一樣的慣例。後來他就問說該怎麼在 bash 裡轉換,後來我找了一下,才知道要用 bc 來轉換。


#!/bin/bash
# program name: forloop.sh
ss=`echo "ibase=10;$1"|bc`
ee=`echo "ibase=10;$2"|bc`
for((var=$ss; var<=$ee; var++ ))
do
echo $var
done


上面的程式演示了 bc 的用法,所以你輸入 ./forloop.sh 001 011 的話,就會印出 1~11,而不是 1~9。

你可以試著把 ss 跟 ee 換為 ss=$1、ee=$2,然後再執行 ./forloop.sh 001 011 看看,會很清楚地發現差異點。

沒有留言: