다른 문자열의 문자를 사용하여 문자열 확장

다른 문자열의 문자를 사용하여 문자열 확장

dk길이 문자열 N과 숫자 값이 있습니다 NDK.

N미만인 경우 NDK이름이 다른 문자열의 시작 부분에 차이를 추가하고 싶습니다 SYMBOL.

if (( n < ndk )); then
  df=$(( ndk - n ))
fi

따라서 차이점이 df있다면 문자열의 처음 두 문자를 문자열에 2추가하고 싶습니다 .SYMBOLDK

symbol="!@#$%^&"

df=2
dk="FIRST"

결과 값 dk

"FIRST!@"

df문자열 시작 부분에 추가 문자를 추가하는 방법은 무엇입니까 SYMBOL?

답변1

df=3
dk=hello
symbol=123456

dk+=${symbol:0:df}

이렇게 하면 문자열 $df의 첫 번째 문자가 $symbol끝에 추가됩니다 $dk.

$dk위 코드의 마지막 값은 입니다 hello123.

+=연산자는 연산자 오른쪽의 값을 연산자 왼쪽의 변수 값 끝에 추가합니다.

${variable:offset:length}의 확장은 bash변수의 (0부터 시작하는 인덱스)에서 length시작하는 긴 하위 문자열을 반환합니다. 둘 다 산술적 맥락에서 평가됩니다.offsetvariableoffsetlength

답변2

원하는 것이 r라이트 패드를 사용하는 것이라면 $dk문자 길이는 다음과 같습니다.$ndk$symbolszsh

$ dk=FIRST ndk=7 symbol='!@#$%^&'
$ printf '%s\n' ${(pr[ndk][$symbol])dk}
FIRST!@
$ ndk=20
$ printf '%s\n' ${(pr[ndk][$symbol])dk}
FIRST!@#$%^&!@#$%^&!

r[length][string]오른쪽 패딩을 사용합니다 .매개변수 확장 플래그. 기호는 p해석되는 방식을 변경합니다. $symbol그렇지 않은 경우 p패딩 문자열은 리터럴이 됩니다 $symbol.

$dk길이가 문자를 초과 하면 $ndk잘립니다.

채우다너비~의$ndk 목록에게보다는길이~의$ndk 수치즉, 각 문자의 표시 너비를 고려하여 m매개변수 확장 플래그를 추가합니다.

여러 개로 채우기바이트바꾸다수치$dk(또는 에 멀티바이트 문자가 있는 경우 영향을 미칩니다 .) 로케일을 로 설정하는 옵션을 $symbols비활성화할 수 있습니다 (플래그를 사용하지 않음 ).multibyteCm

info zsh flags자세히보다.

관련 정보