bash seq替换中的变量({1..10})

Variables in bash seq replacement ({1..10})

本问题已经有最佳答案,请猛点这里访问。

有可能做这样的事情:

1
2
3
4
5
start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})

在bash中,大括号扩展在变量扩展之前发生,因此这不可能直接实现。

相反,使用算术for循环:

1
2
3
4
5
6
start=1
end=10
for ((i=start; i<=end; i++))
do
   echo"i: $i"
done

OUTPUT

1
2
3
4
5
6
7
8
9
10
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
i: 10


你应该考虑使用seq(1)。 你也可以使用eval:

1
eval echo {$start..$end}

这是seq

1
seq -s' ' $start $end


你必须使用eval

1
eval echo {$start..$end}


如果你没有seq,你可能想要坚持使用普通for循环

1
for (( i=start; i<=end; i++ )); do printf"%d" $i; done; echo""

你是积极的,它是BASH吗? ZSH以您想要的方式处理这个问题。 这在BASH中不起作用,因为大括号扩展发生在任何其他扩展类型之前,例如变量扩展。 所以你需要使用另一种方法。

你需要结合括号和变量扩展的任何特殊原因? 也许对您的问题采用不同的方法可以避免对此问题的需求。


我通常只是这样做:

1
echo `seq $start $end`


使用-s
例如:
seq -s''1 10
输出:1 2 3 4 5 6 7 8 9 10