Shell-Script

使用在截斷和替換中缺少 0 的腳本進行字元串操作

  • January 7, 2020

我有以下 shell 命令,並希望確保將TEST_02其列印為輸出

myVer=TEST_03
n=${myVer##*[!0-9]}; p=${myVer%%$n}
lastver=$p$((n-1))
echo $lastver 

這給出了一個輸出,如果有人可以建議正確的腳本來做我想做的事情TEST_2,我們會錯過跟踪我們的測試版本的軌道。TEST_02

我確實嘗試過改變

n=${myVer##*[!0-9]} 

n=${myVer##*[!1-9]}, 

在這種情況下,如果值為 ,事情將無法正常工作TEST_10/TEST_20/TEST_30

0這是因為在計算算術上下文時會丟棄前導$((..)),它執行將數字轉換為以 10 為底的轉換。一種方法可以0通過printf()添加前導零來保留前導

num=${myVer##*[!0-9]}
p=${myVer%%$num}
numLen=${#num}

現在使用這個長度,printf()呼叫添加前導零

printf -v leadzero "%0*d" "$numLen" "$((10#$num-1))"
lastver="$p$leadzero"
printf '%s\n' "$lastver"

您可以10#$在前面添加前綴num-1以處理八進制格式的數字。

引用自:https://unix.stackexchange.com/questions/560757