현재 코드는 다음과 같습니다 : x=${y:0:40}
. 문자열 길이를 40 자로 제한합니다. 문자열이 40 자보다 짧은 경우 후행을 공백으로 채울 수 있습니까?
내 경우 y="very short text"
내 y를 다음과 같이하고 싶습니다.
y = “매우 짧은 텍스트 (+25 후행 공백) “
답변
해당 문자가 모두 1 바이트 인 경우, 즉 문자 세트가 1 바이트 (예 : iso8859-1) 인 로케일이거나 로케일의 문자 세트가 UTF-8이지만 텍스트가 ASCII 인 경우 :
printf -v y %-40.40s "$y"
잘림과 패딩을 모두 다룹니다.
그렇지 않은 경우 항상 40 개의 공백을 추가하고 ${y:0:40}
접근 방식을 사용할 수 있습니다 .
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh
왼쪽 및 오른쪽 패딩을위한 전용 연산자가 있습니다.
y=${(r:40:)y}
(잘라내기도 함). zsh
의 printf
대신 바이트의 문자 수는, 그렇게하지 않았을 bash
위의 문제를 제공합니다. 그러나 옵션 zsh
에는 5.3 이상 이 필요합니다 -v
.
답변
시도해야합니다 printf
:
printf '%-40s' "$y"
답변
순수 bash
:
ten=" "
forty="$ten$ten$ten$ten"
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"
이 방법은 잘린 후 모든 문자열에 0-40 공백을 추가하는 것입니다.
출력 (작은 따옴표 위치 참고) :
'very short text '