用Bashvariables括起扩展 – {0 .. $ foo}

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

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

是否有一个秘密,以鼓励扩大,同时创build文件夹我失踪?

bashvariable 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))}" 

注意

  1. eval是邪恶的
  2. 仔细使用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 
Interesting Posts