如何檢查int變量($ inputNo)以查看它是否是2個或更多個十進制數字?確保int變量的長度是2位數,否則在前面加上0使其長度爲2位數
例子:
inputNo="5"
應改爲:05
inputNo="102"
應該只剩下了102
我想過使用wc
和if
語句,但wc -m
不似乎將實際字符傳遞到wc
,因爲wc
總會看到ms給予給出的字符+1。
但是我不知道如何在當前輸入數字前加0。
如何檢查int變量($ inputNo)以查看它是否是2個或更多個十進制數字?確保int變量的長度是2位數,否則在前面加上0使其長度爲2位數
例子:
inputNo="5"
應改爲:05
inputNo="102"
應該只剩下了102
我想過使用wc
和if
語句,但wc -m
不似乎將實際字符傳遞到wc
,因爲wc
總會看到ms給予給出的字符+1。
但是我不知道如何在當前輸入數字前加0。
您可以使用與bash內置printf
與-v
選項將其寫入到一個變量,而不是將其打印到標準輸出:
pax> inputNo=5 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
05
pax> inputNo=102 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
102
您需要確保它是數字第一,否則轉換將失敗。如果您希望能夠墊任何串出兩個或多個字符,你也可以使用:
while [[ ${#inputNo} -lt 2 ]] ; do
inputNo="0${inputNo}"
done
這基本上是一個while
循環與前綴的字符串「0」,直到長度大於大於或等於兩個。
注意,這也可以在bash
的前綴來兩個零數目,然後簡單地得到該字符串的最後兩個字符,首先檢查它不是已經至少所需的大小進行:
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
兩位數字的差別可能不是太大,但如果您需要更大的寬度,您可能會發現後一種解決方案更好。
如果您使用的是外殼其他比bash
(不可能的,根據你的標籤),你需要找到等價物,或恢復使用外部進程做工作,像:
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
這基本上你在你的問題中想什麼關閉,但注意在echo
命令使用-n
防止尾隨換行符(這是幾乎可以肯定導致你差一錯誤)一樣。
但是,如上所述,這是一個倒退的位置。如果您使用的是bash
,我以前的建議可能是最好的。
您可以使用http://bash-hackers.org/wiki/doku.php/commands/builtin/printf,一個例子從那裏:
the_mac="0:13:ce:7:7a:ad"
# lowercase hex digits
the_mac="$(printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${the_mac//:/ 0x})"
# or the uppercase-digits variant
the_mac="$(printf "%02X:%02X:%02X:%02X:%02X:%02X" 0x${the_mac//:/ 0x})"
感謝您的鏈接,我總是喜歡閱讀功能是如何工作的以及它都可以做。 – Mint 2009-12-14 03:25:33
對於通用填充該字符串是否是數字或不
無需管道echo
成wc
或使用while
循環。
在Bash中,你可以得到這樣一個字符串的長度:${#inputNo}
。
而且因爲你可以做子,你可以這樣做,而不是:
if [[ ${#input} < 2 ]]
then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
謝謝!很棒。 – Mint 2009-12-14 03:24:42
在一般情況下不需要外部進程:'while while test「$ {#inputNo}」-lt 2; do inputNo =「0 $ inputNo」;完成'(* [[*更改爲*測試*添加引用以使其與更多炮彈兼容)。 – 2009-12-14 04:26:04
不需要bash擴展($ {#...}):[case case 0 inputNo in [0-9])inputNo =「0 $ inputNo」;; *);; esac'。 – Idelic 2009-12-14 14:37:11