Shell-Script
使用在截斷和替換中缺少 0 的腳本進行字元串操作
我有以下 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
以處理八進制格式的數字。