数値変数をZSHにゼロパッドする方法(そして多分バッシュ?)
質問
ZSHでは、ZSHを持つファイルの束を作成する必要がある場合は、通常次のようなことがあります。
for x in $(seq 1 1000); do .....; done
.
これはうまく機能し、名前がfoo-1.txt
を持つファイルを与えます。
ただし、これらのファイルはきれいにソートされませんので、foo-1000.txt
変数をゼロに埋めます。
ZSHでそれを行う方法?(そしてボーナス質問、バッシュでそれをする方法)
解決
-w
フラグをseq
(任意のシェル)に使用します。
$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
. 他のヒント
参考清算の場合、数値の生成を制御していない場合は、
でパディングを行うことができます。% value=314
% echo ${(l:10::0:)value}
0000000314
% echo $value
314
. bash's ブレース展開:
$ for n in file-{0001..1000}.txt; do echo $n; done
file-0001.txt
file-0002.txt
file-0003.txt
file-0004.txt
file-0005.txt
file-0006.txt
file-0007.txt
file-0008.txt
file-0009.txt
file-0010.txt
...
file-0998.txt
file-0999.txt
file-1000.txt
.
ZSHでも機能します。
Bashで動作します(ZSHを知らない):
echo foo{0000-1000}.txt
. -
printf
Zerosを使用してPRINTFを使用すると、任意のシェルで機能します。$ printf 'foo%03d.txt\n' $(seq 4) foo001.txt foo002.txt foo003.txt foo004.txt $ printf 'foo%03d.txt\n' {1..4} # works in bash, ksh, zsh. $ n=4; printf 'foo%03d.txt\n' {1..$n} # only ksh, zsh $ n=4; eval printf '"foo%03d.txt\n" {1..'"$n"'}' # workaround needed for bash
-
ブレース拡張を使用する(BashとZSHのみを先行ゼロkshを維持しない)
$ printf '%s\n' foo{1..004}.txt foo001.txt foo002.txt foo003.txt foo004.txt
所属していません StackOverflow