Bash

在bash中,是否可以在大括號擴展中使用整數變數

  • March 25, 2021

我有以下 bash 腳本:

#!/bin/bash

upperlim=10

for i in {0..10}
do
echo $i
done

for i in {0..$upperlim}
do
echo $i
done

第一個for循環(在循環控制中沒有變數upperlim)工作正常,但第二個for循環(在循環控制中變數upperlim)不能。有什麼辦法可以修改第二個for循環以使其正常工作?謝謝你的時間。

原因是 bash 中發生的事情的順序。大括號擴展發生變數擴展之前。為了實現您的目標,您需要使用 C 風格的 for 循環:

upperlim=10

for ((i=0; i<=upperlim; i++)); do
  echo "$i"
done

要使用內置外掛以您的風格完成此操作,您必須使用 eval:

d=12

for i in `eval echo {0..$d}`
do
echo $i
done

但隨著seq

lowerlimit=0
upperlimit=12

for i in $(seq $lowerlimit $upperlimit)
do
echo $i
done

就我個人而言,我發現使用seq更具可讀性。

引用自:https://unix.stackexchange.com/questions/55392