當seq編號是變量時,我在Bash中的內建序列(即:不使用seq)存在問題。例如,此工作和打印箱1 2 3:序列擴展和bash中的變量
for i in {1..3};do echo $i;done
但這:
的bash-3.2 $一個= 3;對於i在{1 .. $一個};做回聲$我;做
失敗,並打印我{} 1..3僅
這適用於ZSH,我知道我有一個替代方案,使計數器的事情,但不知道是否這是一個錯誤或支柱擴展功能!
當seq編號是變量時,我在Bash中的內建序列(即:不使用seq)存在問題。例如,此工作和打印箱1 2 3:序列擴展和bash中的變量
for i in {1..3};do echo $i;done
但這:
的bash-3.2 $一個= 3;對於i在{1 .. $一個};做回聲$我;做
失敗,並打印我{} 1..3僅
這適用於ZSH,我知道我有一個替代方案,使計數器的事情,但不知道是否這是一個錯誤或支柱擴展功能!
在bash,支架膨脹變量擴展之前進行。訂單請參閱Shell Expansions。
$ a=7; echo {1..3} {4..$a}
1 2 3 {4..7}
如果要使用變量,請使用C樣式for
循環,如Shawn的答案中所述。
$ num=3
$ for i in $(eval echo {1..$num});do echo $i;done
1
2
3
看起來像一種黑客給我...但是,謝謝.. – 2011-02-10 11:41:15
比C風格的循環效率低(由於使用一個子外殼)並承擔安全風險:除非完全控制或驗證了傳遞給`eval`的字符串中使用的變量的值,否則不要使用`eval`。否則,可能會執行任意命令。例如,以下精心設計的`$ num`值將枚舉當前用戶的主文件夾中的文件: `num ='}; ls〜; {';我在$(eval回聲{1 .. $ num});做echo $ i;完成` – mklement0 2016-06-23 03:19:03
另一種方法是使用雙括號構建體,其允許C樣式循環:
A=3
for ((i=1; i<=$A; i++)); do
echo $i
done
嗨,我不感興趣使用外部命令,但內部bash內建。 – 2011-02-10 11:40:40
他不想使用`seq` – kurumi 2011-02-10 11:40:57
另一種選擇是使用序列命令:
a=3; for i in $(seq 1 $a);do echo $i;done
試試這個:
$ start=3
$ end=5
$ echo {$(echo $start)..$(echo $end)}
我也需要做somenthing,如:
N =一些數量; {1 .. $ n..increment}
所以就用該替代方法:
n=100
i=1
while [ $i -lt $n ]
do
echo $i
i=$(($i+1))
done
的[在bash腳本傳遞到用於環路參數](
可能重複http://stackoverflow.com/ question/4764383/arguments-passed-in-for-loop-in-bash-script) – 2011-02-10 11:40:28