Linux 如何在zsh(也可能是bash?)中对数字变量进行零填充
在zsh中,当我必须使用zsh创建一组文件时,我通常会执行以下操作:Linux 如何在zsh(也可能是bash?)中对数字变量进行零填充,linux,bash,zsh,seq,zero-pad,Linux,Bash,Zsh,Seq,Zero Pad,在zsh中,当我必须使用zsh创建一组文件时,我通常会执行以下操作: for x in $(seq 1 1000); do .....; done 这很好,它给我的文件名为foo-1.txtfoo-1000.txt 但是,这些文件排序不好,因此我想对$x变量进行零填充,从而生成foo-0001.txt的名称foo-1000.txt 在zsh中如何做到这一点?(还有奖金问题,如何在bash中实现?使用-w标志来seq(在任何shell中): 您可以使用bash的: 也适用于zsh。适用于bash
for x in $(seq 1 1000); do .....; done
这很好,它给我的文件名为foo-1.txt
<代码>foo-1000.txt但是,这些文件排序不好,因此我想对
$x
变量进行零填充,从而生成foo-0001.txt
的名称<代码>foo-1000.txt
在zsh中如何做到这一点?(还有奖金问题,如何在bash中实现?使用
-w
标志来seq
(在任何shell中):
您可以使用bash的:
也适用于zsh。适用于bash(不知道适用于zsh):
为了便于参考,如果您无法控制数值的生成,则可以使用以下方法进行填充:
% value=314
% echo ${(l:10::0:)value}
0000000314
% echo $value
314
使用printf填充零在任何shell中都有效:
$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
$ 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
% my_num=43
% echo ${(l(5)(0))my_num}
00043
看到${(l…)对搜索引擎不是很友好,可以在zshexpn(1)中的参数扩展标志下查找它。还可以使用成对的分隔符使语法更直观:${(l{10}{0})value}。奇怪的是,zmv不理解这种形式,尽管括号可以很好地工作:${(l(10)(0))value}。seq-w 001 005#pads
$ 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
$ printf '%s\n' foo{1..004}.txt
foo001.txt
foo002.txt
foo003.txt
foo004.txt
% my_num=43
% echo ${(l(5)(0))my_num}
00043