Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在zsh(也可能是bash?)中对数字变量进行零填充_Linux_Bash_Zsh_Seq_Zero Pad - Fatal编程技术网

Linux 如何在zsh(也可能是bash?)中对数字变量进行零填充

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

在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
(在任何shell中):

您可以使用bash的:

也适用于zsh。

适用于bash(不知道适用于zsh):


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

% value=314
% echo ${(l:10::0:)value}
0000000314
% echo $value
314
  • printf
    使用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
    
  • 使用大括号扩展(只有bash和zsh保留前导零,ksh不保留)

  • 在Zsh中:

    % 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