dk
길이 문자열 N
과 숫자 값이 있습니다 NDK
.
N
미만인 경우 NDK
이름이 다른 문자열의 시작 부분에 차이를 추가하고 싶습니다 SYMBOL
.
if (( n < ndk )); then
df=$(( ndk - n ))
fi
따라서 차이점이 df
있다면 문자열의 처음 두 문자를 문자열에 2
추가하고 싶습니다 .SYMBOL
DK
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
시작하는 긴 하위 문자열을 반환합니다. 둘 다 산술적 맥락에서 평가됩니다.offset
variable
offset
length
답변2
원하는 것이 r
라이트 패드를 사용하는 것이라면 $dk
문자 길이는 다음과 같습니다.$ndk
$symbols
zsh
$ 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
비활성화할 수 있습니다 (플래그를 사용하지 않음 ).multibyte
C
m
info zsh flags
자세히보다.