2015-04-06 68 views
0

有人可以解釋在這個bash代碼中如何生成2909數字?以及如何在沒有sed/awk/dc的情況下修復它。Bash字符串以數字開頭的零個數

s="05535" 
echo $((s)) 
>> 2909 

目前這是我的代碼,我不喜歡。

s=$(echo "$s 0 -p" | dc) 
+1

前導0會導致數字被解釋爲八進制值 –

+0

謝謝,任何簡單的修復? – King110

+0

's = $ {s#* 0}'去除一個前導零。 – Cyrus

回答

2

2909爲八進制05535十進制值(基體10)。

0開始的任何數字被認爲是八進制值,((..))默認打印十進制值。

爲了保持號碼是十進制值使用(感謝@thatotherguy):

s="05535" 
echo $((10#$s)) 
5535 
+0

如果解決了,您可以通過點擊我答案左上角的刻度線標記答案。 – anubhava

+3

你可以使用'echo $((10#$ s))'強制解釋數字爲十進制 –

+1

@anubhava:你可以在沒有sed/awk/dc的情況下添加如何修復它?那個人的方法可能是最標準的方法,並且與'bash(1)'中提到的最接近。 –

0

除了其他方法,簡單字符串指標可以同時提供測試和轉換:

[ ${s:0:1} -eq 0 ] && s=${s:1} 

如果您擔心多項領先0的,然後

while [ ${s:0:1} -eq 0 ]; do s=${s:1}; done 
相關問題