使用另一个字符串中的字符来延长字符串

使用另一个字符串中的字符来延长字符串

dk我有一个长度的字符串N和一个数值NDK

如果N小于NDK我想附加与另一个名为 的字符串开头的差异SYMBOL

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

因此,如果差异df2,我想将字符串中的前两个字符附加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变量中从(从零开始的索引)length开始的长子字符串。和都在算术上下文中求值。offsetvariableoffsetlength

答案2

如果您想要的是right-pad到使用, in 中的字符$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),您可以禁用multibyte将区域设置设置为的选项C(并且不使用该m标志)。

info zsh flags详情请参阅。

相关内容