bash 中的序列扩展和变量
当 seq 编号是变量时,我在 Bash 中遇到内置序列(即:不使用 seq)的问题。例如,这可以工作并打印我 1 2 3:
for i in {1..3};do
echo $i
done
但这:
a=3
for i in {1..$a};do
echo $i
done
失败并仅打印我 {1..3}
这适用于 ZSH,我知道我有另一种方法可以制作计数器,但想知道这是否是一个错误或大括号扩展功能!
I am having a problem with builtin sequences (ie: not using seq) in Bash when the seq number is a variable. For example, this works and print me 1 2 3:
for i in {1..3};do
echo $i
done
but this :
a=3
for i in {1..$a};do
echo $i
done
fail and print me {1..3} only
This works with ZSH and I know I have an alternative to make a counter thing but wondering if this is a bug or a brace expansion feature!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
在 Bash 中,大括号扩展在变量扩展之前执行。有关顺序,请参阅 Shell 扩展。
如果您想使用变量,请使用 C 风格的
for
循环,如 Shawn 的回答所示。In Bash, brace expansion is performed before variable expansion. See Shell Expansions for the order.
If you want to use a variable, use C-style
for
loops as in Shawn's answer.另一种方法是使用双括号结构,它允许 C 风格的循环:
An alternative would be to use the double-parenthesis construct which allows C-style loops:
注意:
Notes:
其他选项是使用 seq 命令:
Other option is to use seq command:
我还需要做一些类似的事情:
所以我使用了这个解决方法:
I also needed to do somenthing like:
so I used this workaround:
试试这个:
try this: