zsh で N 個のスペースからなる文字列を生成したい


例えば Ruby では以下のようにすればできる。

n = 8
spaces = " " * n
p spaces # => "        " (8個のスペースからなる文字列)

zsh の場合は printf を使えば作れる。

$ n=8
$ spaces=$(printf "%${n}s" "")
$ typeset -p spaces
typeset spaces='        '

けど、printf を使わなくても Parameter Expansion Flags を利用するともっと簡単に書ける。

$ n=8
$ spaces=${(l:$n:):-}
$ typeset -p spaces
typeset spaces='        '

${:-} で空文字を作り、指定文字数分右詰めにしてくれる l:N: フラグをつけている。
l:N: は標準で半角スペースで埋めてくれるが、padding に使う文字は指定できて、例えば l:N::0: というようにすれば zero padding になる。