切り取りと置換でゼロがないスクリプトを使用した文字列操作

切り取りと置換でゼロがないスクリプトを使用した文字列操作

次のシェルコマンドがあり、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

答え1

0$((..))算術コンテキストを計算すると、数字を10進数に変換すると先行が削除されるためです。0次を使用して前にゼロを追加してprintf()行間を維持する1つの方法

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#$8進形式の数字を処理するために、前にプレフィックスを追加できますnum-1

関連情報