잘라내기 및 바꾸기에서 0이 누락된 스크립트를 사용한 문자열 조작

잘라내기 및 바꾸기에서 0이 누락된 스크립트를 사용한 문자열 조작

다음 셸 명령이 있고 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.

관련 정보