반응형
문자열에서 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
반응형
'programing tip' 카테고리의 다른 글
http.ListenAndServe () 중지 방법 (0) | 2020.11.30 |
---|---|
클릭 할 때 페이지가 "점프"되지 않도록 빈 HTML 앵커를 만들려면 어떻게해야합니까? (0) | 2020.11.30 |
Ruby와 Ruby on Rails의 차이점은 무엇입니까? (0) | 2020.11.30 |
닫기 명령을 단추에 바인딩하는 방법 (0) | 2020.11.29 |
날짜에서 주 번호 (연도) 가져 오기 PHP (0) | 2020.11.29 |