如何在zsh中填充数字变量(也许还​​有bash?)

erv*_*gsb 18 linux bash zsh zero-pad seq

在zsh中,当我必须使用zsh创建一堆文件时,我通常会执行以下操作:

for x in $(seq 1 1000); do .....; done
Run Code Online (Sandbox Code Playgroud)

这工作得很好,它给我的文件与名foo-1.txt.. foo-1000.txt.
但是,这些文件不排序很好,所以我想零垫的$x变量,从而产生的名称foo-0001.txt.. foo-1000.txt.

如何在zsh中这样做?(和奖金问题,如何在bash中做到这一点?)

Fra*_*sco 21

为了便于参考,如果您无法控制数值的生成,可以使用以下命令进行填充:

% value=314
% echo ${(l:10::0:)value}
0000000314
% echo $value
314
Run Code Online (Sandbox Code Playgroud)

  • 看到$ {(l ...对搜索引擎不是很友好,请在zshexpn(1)中的参数扩展标志下查看.还可以使用配对分隔符使语法更直观:$ {(l { 10} {0})的值}. (3认同)

Mat*_*Mat 14

使用-w标志seq(在任何shell中):

$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
Run Code Online (Sandbox Code Playgroud)


gle*_*man 10

你可以使用bash的大括号扩展:

$ 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
Run Code Online (Sandbox Code Playgroud)

也适用于zsh.


Kon*_*tin 9

在 Zsh 中:

% my_num=43
% echo ${(l(5)(0))my_num}
00043
Run Code Online (Sandbox Code Playgroud)