在zsh for循环中,零前导数字串生成

时间:2017-10-28 00:23:07

标签: zsh oh-my-zsh

我有很多part-00001,part-00002,...文件。

我想用这种方式:

  addItem() {
    let todo = this.state.input;
    let todos = this.state.todos;
    let id = this.state.id;


      if (this.state.input == '') {
        alert("enter a value");
        document.getElementById('error').style.color = 'red';
        document.getElementById('error').innerHTML = 'Please enter something first';
      }

      else {
        this.setState({
          todos: todos.concat(todo),
          id: id + 1,
        }, () => {
          document.getElementById('test').value = '';
        })
        console.log(this.state.id);
      }

  }

如何在zsh中格式化" part-000xx" -like字符串i?

1 个答案:

答案 0 :(得分:1)

可以通过以下方式完成:

  • typeset -Z 5 i(使用内置typeset -Z [N]
  • printf "part-%05d" $i(使用内置printf "%05d" $i
  • ${(l:5::0:)i}(使用参数扩展标记l:expr::string1:string2:

如下所示:

    typeset -Z 5 j
    for ((i=0;i<1000;i++)); do
      # <some command> <formatted string with i>
      j=$i; echo "part-$j" # use $j here for sure the effects of below 2 lines
      echo "$(printf "part-%05d" $i)"
      echo "part-${(l:5::0:)j}"
    done
    # This outputs below:
    # >> part-00000
    # >> part-00000
    # >> part-00000
    # >> part-00001
    # >> part-00001
    # >> part-00001
    # >> ...
    # >> part-00999

以下是每个项目的说明。

  

typeset
  -Z [N]
  如果与-L标志一起设置,则特别处理。否则,类似于-R,除非前导零用于填充而不是空白,如果第一个非空白字符是数字。数字参数是专门处理的:它们总是有资格用零填充,并且零被插入输出中的适当位置。
   - zshbuiltins(1), typeset, Shell Builtin Commands

  

printf
   根据格式规范打印参数。格式化规则与C中使用的相同    - zshubuiltins(1), printf, Shell Builtin Commands

  

l :EXPR ::字符串1 ::字符串2:
  在左侧填充生成的单词。如果需要,每个单词都将被截断,并放置在 expr 字符宽的字段中   参数:string1::string2:是可选的;既不是第一个,也不是两个都可以。请注意,必须为三个参数中的每一个使用相同的分隔符对。如果没有给出string1,左边的空格将填充 string1 (根据需要连接)或空格。如果同时给出 string1 string2 ,则 string2 会直接插入每个单词的左侧,必要时会被截断,然后才能使用string1产生任何剩余的填充物    - zshexpn(1), Parameter Expansion Flags