在bash中,是否可以在大括号扩展中使用整数变量

在bash中,是否可以在大括号扩展中使用整数变量

我有以下 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循环以使其正常工作吗?谢谢你的时间。

答案1

原因是 bash 中事件发生的顺序。发生大括号扩展变量被扩展。为了实现你的目标,你需要使用 C 风格的 for 循环:

upperlim=10

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

答案2

要以您的风格仅使用内置函数来完成此操作,您必须使用 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更具可读性。

答案3

POSIX 方式

如果您关心便携性,请使用POSIX 标准的示例:

i=2
END=5
while [ "$i" -le "$END" ]; do
    echo "$i"
    i=$(($i+1))
done

输出:

2
3
4
5

事物是不是POSIX:

答案4

for i in $(seq ${1:-1} ${2:-10}); do                                            
        echo $i                                                                 
done 

                                                                       
                                                                            
i=${1:-1}                                                                       
while (( $i <= ${2:-10} )); do                                                  
        echo $i                                                                 
        i=$(($i + 1))                                                           
done

相关内容