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
变量中从(从零开始的索引)length
开始的长子字符串。和都在算术上下文中求值。offset
variable
offset
length
答案2
如果您想要的是r
ight-pad到使用, in 中的字符$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
详情请参阅。