有人可以解釋在這個bash代碼中如何生成2909
數字?以及如何在沒有sed/awk/dc的情況下修復它。Bash字符串以數字開頭的零個數
s="05535"
echo $((s))
>> 2909
目前這是我的代碼,我不喜歡。
s=$(echo "$s 0 -p" | dc)
有人可以解釋在這個bash代碼中如何生成2909
數字?以及如何在沒有sed/awk/dc的情況下修復它。Bash字符串以數字開頭的零個數
s="05535"
echo $((s))
>> 2909
目前這是我的代碼,我不喜歡。
s=$(echo "$s 0 -p" | dc)
2909
爲八進制05535
十進制值(基體10)。
從0
開始的任何數字被認爲是八進制值,((..))
默認打印十進制值。
爲了保持號碼是十進制值使用(感謝@thatotherguy):
s="05535"
echo $((10#$s))
5535
如果解決了,您可以通過點擊我答案左上角的刻度線標記答案。 – anubhava
你可以使用'echo $((10#$ s))'強制解釋數字爲十進制 –
@anubhava:你可以在沒有sed/awk/dc的情況下添加如何修復它?那個人的方法可能是最標準的方法,並且與'bash(1)'中提到的最接近。 –
除了其他方法,簡單字符串指標可以同時提供測試和轉換:
[ ${s:0:1} -eq 0 ] && s=${s:1}
如果您擔心多項領先0
的,然後
while [ ${s:0:1} -eq 0 ]; do s=${s:1}; done
前導0會導致數字被解釋爲八進制值 –
謝謝,任何簡單的修復? – King110
's = $ {s#* 0}'去除一個前導零。 – Cyrus