在zsh的,當我要創建一批具有zsh的文件,我通常是這樣的:如何零墊數值變量
for x in $(seq 1 1000); do .....; done
這工作正常,它給我的文件名稱爲foo-1.txt
.. foo-1000.txt
。
但是,這些文件排序不好,所以我想零填充$x
變量,從而生成名稱foo-0001.txt
.. foo-1000.txt
。
如何在zsh中做到這一點? (和獎金的問題,該怎麼辦呢在bash?)
在zsh的,當我要創建一批具有zsh的文件,我通常是這樣的:如何零墊數值變量
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
(任何殼):
$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
你可以使用bash的brace expansion:
$ 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
以供參考,如果你不擁有控制權的數值的產生,你可以做填充有:
% value=314
% echo ${(l:10::0:)value}
0000000314
% echo $value
314
看到$ {(l ...不是很適合搜索引擎,請在zshexpn(1)中的Parameter Expansion Flags下查找。也可以使用成對的分隔符使語法成爲a更直觀:$ {(l {10} {0})value}。 – 2013-07-22 20:57:38
奇怪的是,zmv並不理解這種形式,儘管圓括號工作正常:$ {(l(10)(0))value}。 – 2013-07-22 21:11:00
的printf
用printf來墊零工作在任何shell:
$ 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
哦。對不起,沒有看到。 – ervingsb 2012-03-15 08:33:03
seq -w 001 005#pads – zzapper 2017-05-10 13:48:27