당신은 변수에 쓸 -v
옵션과 함께 bash는-내장 printf
를 사용하는 대신 표준 출력에 인쇄 할 수 있습니다
pax> inputNo=5 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
05
pax> inputNo=102 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
102
먼저 숫자가 맞는지 확인하십시오. 그렇지 않으면 변환이 실패합니다. 두 개 이상의 문자에서 패드 어떤 문자열로 할 수 있도록하려면, 당신은 또한 사용할 수 있습니다 귀하의 문자열을 접두사 while
루프가 기본적으로
while [[ ${#inputNo} -lt 2 ]] ; do
inputNo="0${inputNo}"
done
이 "0"길이가 클 때까지 2보다 크거나 같다.
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
:이 또한 단순히 문자열의 마지막 두 문자를 받고 두 개의 제로와 수를 접두어로 이미 적어도 원하는 크기 아니라고 먼저 확인하여 bash
에서 수행 될 수 있다는
는
주 두 자리 숫자의 차이가 너무 큰 것은 아니지만 큰 너비가 필요한 경우 후자의 솔루션이 더 좋을 수 있습니다.
당신이 쉘을 사용하는 경우 다른bash
이상 (태그에 따라 가능성), 당신은 등가물을 찾거나 같은, 뭔가를 일을하는 외부 프로세스를 사용하여 복귀해야합니다 :
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
이 기본적으로 당신이 당신의 질문에 떨어져 생각하지만 (거의 확실히 오프별로 한 오류의 원인이 된) 후행 줄 바꿈을 방지하기 위해 echo
명령 -n
의 사용을주의하고 있었는지 않습니다.
그러나 앞에서 설명한 것처럼이 위치는 폴백 위치입니다. bash
을 사용하는 경우 이전에 제안한 것이 가장 좋습니다.문자열이 숫자인지 범용 패딩
감사합니다. 훌륭하게 작동합니다. – Mint
일반적으로 외부 프로세스가 필요 없습니다. while test "$ {# inputNo}"-lt 2; do inputNo = "0 $ inputNo"; done '(* [* *는 더 많은 쉘과 호환되도록 인용문을 추가하여 * test *로 변경되었습니다). –
bash 확장 ($ {# ...})을위한 필요가 없습니다 : [0-9]에서'case $ inputNo) inputNo = "0 $ inputNo";; *) ;; esac'. – Idelic