WEEKS_TO_SAVE=4
mkdir -p weekly.{0..$WEEKS_TO_SAVE}
给我一个名为weekly的文件夹。{0..4}
在创建我缺少的文件夹时是否有大括号扩展的秘密?
答案 0 :(得分:10)
大括号不支持BASH中的变量,你可以这样做:
for (( c=0; c<=WEEKS_TO_SAVE; c++ ))
do
mkdir -p weekly.${c}
done
答案 1 :(得分:10)
bash
在brace expansion
之前variable expansion
weekly.{0..4}
,因此您获得eval
。
由于结果是可预测且安全的(不信任用户输入),因此您可以在案例中使用$ WEEKS_TO_SAVE=4
$ eval "mkdir -p weekly.{0..$((WEEKS_TO_SAVE))}"
:
eval
注意:
eval
是邪恶的$((..))
此处,{{1}}用于强制将变量计算为整数表达式。
答案 2 :(得分:9)
另一种没有eval并且仅调用mkdir一次的方法:
WEEKS_TO_SAVE=4
mkdir -p $(seq -f "weekly.%.0f" 0 $WEEKS_TO_SAVE)
答案 3 :(得分:2)
Brace expansion不支持它。您必须使用loop。
执行此操作支撑扩展在任何其他扩展之前执行,任何扩展 其他扩展特有的字符将保留在结果中。它 严格是文字的。 Bash不适用任何句法解释 在扩展的背景下或大括号之间的文本。至 避免与参数扩展冲突,字符串'$ {'不是 被认为有资格进行大括号扩展
。
答案 4 :(得分:1)
如果您的盒子上安装了zsh
,那么如果您使用#!/bin/zsh
作为翻译,那么您编写的代码将与Z-shell一起使用:
$ WEEKS_TO_SAVE=4
$ echo {0..$WEEKS_TO_SAVE}
0 1 2 3 4