別の文字列の文字を使用した文字列の拡張

別の文字列の文字を使用した文字列の拡張

dk長さ文字列Nと数値がありますNDK

N未満の場合は、NDK名前が別の文字列の先頭に違いを追加したいと思いますSYMBOL

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

したがって、違いがdfある場合は、文字列の最初の2文字を文字列に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詳細より。

関連情報