다음 셸 명령이 있고 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
다음을 사용하여 앞에 0을 추가하여 printf()
행간을 유지할 수 있는 한 가지 방법
num=${myVer##*[!0-9]}
p=${myVer%%$num}
numLen=${#num}
printf()
이제 이 길이를 사용하여 앞에 0을 추가하도록 호출합니다.
printf -v leadzero "%0*d" "$numLen" "$((10#$num-1))"
lastver="$p$leadzero"
printf '%s\n' "$lastver"
10#$
8진수 형식의 숫자를 처리하기 위해 앞에 접두사를 추가 할 수 있습니다 num-1
.