使用Bash变量进行大括号扩展-{0..$foo}
给我一个名为weekly的文件夹。{0..4}使用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不支持它。您必须使用 支架展开在任何其他展开之前执行,并且 结
创建我丢失的文件夹时大括号展开有什么秘密吗?大括号不支持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中包含空格或其他字符时不起作用。