代码之家  ›  专栏  ›  技术社区  ›  Ahmad Ismail

fish将bash脚本视为fish脚本

  •  0
  • Ahmad Ismail  · 技术社区  · 2 年前

    我有一个bash脚本如下:

    #!/bin/bash
    
    # create-multiple-chapters {1..5}
    # create-multiple-chapters {1,2,5}
    
    for i in $*; do
        mkdir chapter${i}
        touch chapter${i}/init.adoc
    done
    

    它用文件创建多个目录。我 understand 该fish不支持{x.y.}范围扩展语法。不过,这是一个bash脚本。当我运行这个脚本时 create-multiple-chapters {1..5} ,它只创建一个名为 chapter{1..5} 。为什么?

    1 回复  |  直到 2 年前
        1
  •  3
  •   k314159    2 年前

    问题是你认为 {1..5} 由脚本的这一行展开:

    for i in $*; do
    

    事实上,这是一个错误的假设。当你的智能外壳是Bash,并且你输入 create-multiple-chapters {1..5} 在命令行,是交互式shell本身进行扩展,并将命令行转换为 create-multiple-chapters 1 2 3 4 5 。然后,Bash脚本处理循环中这五个参数中的每一个。

    鱼不能做这种扩展。相反,如果您正在运行鱼,则需要使用 seq 命令进行扩展,并将扩展后的参数传递给Bash脚本。

    推荐文章