用Bashvariables括起扩展 – {0 .. $ foo}
WEEKS_TO_SAVE=4 mkdir -p weekly.{0..$WEEKS_TO_SAVE}
给我一个名为weekly的文件夹。{0..4}
是否有一个秘密,以鼓励扩大,同时创build文件夹我失踪?
bash
在variable expansion
brace expansion
之前确实brace expansion
,所以你weekly.{0..4}
得到weekly.{0..4}
。
由于结果是可预测和安全的( 不要相信用户input ),您可以在您的情况下使用eval
:
$ WEEKS_TO_SAVE=4 $ eval "mkdir -p weekly.{0..$((WEEKS_TO_SAVE))}"
注意 :
-
eval
是邪恶的 - 仔细使用
eval
在这里, $((..))
被用来强制variables被评估为一个整数expression式。
大括号不支持BASH中的variables,你可以这样做:
for (( c=0; c<=WEEKS_TO_SAVE; c++ )) do mkdir -p weekly.${c} done
另一种不需要评估的方法,只需要调用一次mkdir即可:
WEEKS_TO_SAVE=4 mkdir -p $(seq -f "weekly.%.0f" 0 $WEEKS_TO_SAVE)
Brace扩展不支持它。 你将不得不使用循环 。
在任何其他扩展之前执行扩展扩展,并且在结果中保留任何特殊于其他扩展的字符。 这是严格的文本。 Bash不会对扩展或大括号之间的文本应用任何语法解释。 为避免与参数扩展的冲突,string“$ {”不被认为可以用于大括号扩展
。
如果你碰巧在你的机器上安装了zsh
,如果你使用#!/bin/zsh
作为你的解释器,你写的代码将会用到Z-shell:
例
$ WEEKS_TO_SAVE=4 $ echo {0..$WEEKS_TO_SAVE} 0 1 2 3 4