Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
使用Bash变量进行大括号扩展-{0..$foo}_Bash_Brace Expansion - Fatal编程技术网

使用Bash变量进行大括号扩展-{0..$foo}

使用Bash变量进行大括号扩展-{0..$foo},bash,brace-expansion,Bash,Brace Expansion,给我一个名为weekly的文件夹。{0..4} 创建我丢失的文件夹时大括号展开有什么秘密吗?大括号不支持BASH中的变量,您可以这样做: WEEKS_TO_SAVE=4 mkdir -p weekly.{0..$WEEKS_TO_SAVE} 对于((c=0;c大括号不支持BASH中的变量,可以执行以下操作: WEEKS_TO_SAVE=4 mkdir -p weekly.{0..$WEEKS_TO_SAVE} for((c=0;c不支持它。您必须使用 支架展开在任何其他展开之前执行,并且 结

给我一个名为weekly的文件夹。{0..4}


创建我丢失的文件夹时大括号展开有什么秘密吗?

大括号不支持BASH中的变量,您可以这样做:

WEEKS_TO_SAVE=4
mkdir -p weekly.{0..$WEEKS_TO_SAVE}

对于((c=0;c大括号不支持BASH中的变量,可以执行以下操作:

WEEKS_TO_SAVE=4
mkdir -p weekly.{0..$WEEKS_TO_SAVE}
for((c=0;c不支持它。您必须使用

支架展开在任何其他展开之前执行,并且 结果中保留了其他扩展的特殊字符 是严格的文本。Bash不应用任何语法解释 到展开的上下文或大括号之间的文本。到 避免与参数展开冲突,字符串“${”不是 认为有资格进行支架扩展

.

不支持。您必须使用

支架展开在任何其他展开之前执行,并且 结果中保留了其他扩展的特殊字符 是严格的文本。Bash不应用任何语法解释 到展开的上下文或大括号之间的文本。到 避免与参数展开冲突,字符串“${”不是 认为有资格进行支架扩展


.

bash
变量扩展
之前进行
大括号扩展
,因此您每周获得
。{0..4}

由于结果是可预测和安全的(不信任用户输入),您可以在您的情况下使用
eval

 for (( c=0; c<=WEEKS_TO_SAVE; c++ ))
 do
    mkdir -p weekly.${c}
 done
注意

  • eval
    是邪恶的
  • 仔细使用
    eval

  • 这里,
    $(..)
    用于强制将变量作为整数表达式进行求值。

    bash
    变量展开之前进行
    大括号展开
    ,因此您每周都会得到
    。{0..4}

    由于结果是可预测和安全的(不信任用户输入),您可以在您的情况下使用
    eval

     for (( c=0; c<=WEEKS_TO_SAVE; c++ ))
     do
        mkdir -p weekly.${c}
     done
    
    注意

  • eval
    是邪恶的
  • 仔细使用
    eval

  • 这里,
    $(..)
    用于强制将变量作为整数表达式进行求值。

    如果您的机箱上安装了
    zsh
    ,那么如果您使用
    #!/bin/zsh
    作为解释器,您编写的代码将与Z-shell一起工作:

    例子
    如果您的机器上碰巧安装了
    zsh
    ,那么如果您使用
    #!/bin/zsh
    作为解释器,您编写的代码将与Z-shell一起工作:

    例子
    另一种不用eval,只调用mkdir一次的方法:

    $ WEEKS_TO_SAVE=4
    $ echo {0..$WEEKS_TO_SAVE}
    0 1 2 3 4
    

    另一种不用eval,只调用mkdir一次的方法:

    $ WEEKS_TO_SAVE=4
    $ echo {0..$WEEKS_TO_SAVE}
    0 1 2 3 4
    

    我几乎会因为使用EVAL而否决这一点。我会考虑用C语言来循环“正确”的方式,但是这是实现MKDIR一次的唯一方法。EVE有什么不对?你在BASH中所做的一切都是“危险的”。,eval不会让事情变得更糟。@kev我在谷歌上搜索了“eval是邪恶的”,发现:有价值的场景只占eval实际使用量的一小部分。在大多数情况下,eval的使用就像大锤打苍蝇一样——它完成了任务,但功率太大。它速度慢,笨重,而且在你犯错误时往往会扩大伤害这是一个值得注意的案例,还是这里列出的其他选项更好?引用的是JScript(即MS JavaScript)。这里没有上下文。“Grault,即使在这里,也确实是准确的;见上文,也有巴什法克48()。我几乎因为EVE的使用而否决了这一点。但是这是在只运行一次mkdir的情况下实现它的唯一方法。eval怎么了?在bash中所做的一切都是“危险的”,eval不会让事情变得更糟。@kev我在谷歌上搜索了“eval是邪恶的”,发现:有价值的场景只占eval实际使用量的一小部分。在大多数情况下,eval的使用就像大锤打苍蝇一样——它完成了任务,但功率太大。它速度慢,笨重,而且在你犯错误时往往会扩大伤害举个例子。那么这是一个有价值的案例,还是这里列出的其他选项更好?这句话是在谈论JScript(即MS JavaScript)。它在这里是断章取义的。@Grault,即使在这里也肯定是准确的;参见上文,还有BashFAQ#48().Boo,hiss;在格式字符串的IFS中包含空格或其他字符时不起作用。Boo,hiss;在格式字符串的IFS中包含空格或其他字符时不起作用。