programing tip

문자열에서 0 채우기

itbloger 2020. 11. 30. 07:53
반응형

문자열에서 0 채우기


팟 캐스트를 얻기 위해 bash 스크립트를 작성 중입니다. 문제는 일부 팟 캐스트 번호가 한 자리이고 다른 번호가 2/3 자리이므로 모두 3 자리 숫자로 만들기 위해 패딩해야합니다.

다음을 시도했습니다.

n=1

n = printf %03d $n

wget http://aolradio.podcast.aol.com/sn/SN-$n.mp3

그러나 변수 'n'은 영구적으로 채워지지 않습니다. 영구적으로 만들려면 어떻게해야합니까?


백틱을 사용하여 printf 명령 (``)의 결과를 할당합니다.

n=1
wget http://aolradio.podcast.aol.com/sn/SN-`printf %03d $n`.mp3

편집 : 실제로 필요하지 않은 한 줄을 제거했습니다. 'printf % ...'의 출력을 n에 할당하려면 다음을 사용할 수 있습니다.

n=`printf %03d $n`

그 후에 이전에 사용한 $ n 변수 대체를 사용하십시오.


printf 명령의 반환 값 (종료 코드)을 할당하고있는 것 같습니다. printf의 출력을 할당하려고합니다.

bash-3.2$ n=1
bash-3.2$ n=$(printf %03d $n)
bash-3.2$ echo $n
001

입력 문자열에 0이 있으면주의하십시오!
printf는 여전히 패딩을 수행하지만 문자열을 16 진수 8 진수 형식으로 변환합니다 .

# looks ok
$ echo `printf "%05d" 03`
00003

# but not for numbers over 8
$ echo `printf "%05d" 033`
00027

이에 대한 해결책은 십진수 대신 부동 소수점을 인쇄하는 것 같습니다.
트릭은 소수점 이하 자릿수를 생략하는 것입니다 .0f.

# works with leading zero
$ echo `printf "%05.0f" 033`
00033

# as well as without
$ echo `printf "%05.0f" 33`
00033

컨텍스트 전환을 방지하려면 :

a="123"
b="00000${a}"
c="${b: -5}"

n=`printf '%03d' "2"`

참고 간격 및 백틱


noselad가 언급했듯이, $ (...)와 같은 대체 명령은 백틱을 대체하기 때문에 바람직합니다 `...`.

이스케이프 대신 여러 명령 대체 (예 : "백 슬래시", 백틱)를 중첩하려고 할 때 작업하기가 훨씬 쉽습니다.

참고 URL : https://stackoverflow.com/questions/1117134/padding-zeros-in-a-string

반응형