문자열을 정당화하기 위해 후행 공백을 추가하십시오. 40 자보다 짧은

현재 코드는 다음과 같습니다 : 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}

(잘라내기도 함). zshprintf대신 바이트의 문자 수는, 그렇게하지 않았을 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                         '


답변