在bash for循环中计算表达式
如果我这样做,我会得到预期的结果在bash for循环中计算表达式,bash,shell,unix,Bash,Shell,Unix,如果我这样做,我会得到预期的结果 for i in {125..129}; do echo $i; done 125 126 127 128 129 但当我这么做的时候?我有点奇怪 for i in {$((1+(25-1)*500))..$((25*500))}; do echo $i; done {12001..12500} 我希望在循环变量中传递一个变量,如$1+$j-1*500它只是在回显文本,与它所说的完全相同: {12001..12500} 那就是{+12001+…+12500
for i in {125..129}; do echo $i; done
125
126
127
128
129
但当我这么做的时候?我有点奇怪
for i in {$((1+(25-1)*500))..$((25*500))}; do echo $i; done
{12001..12500}
我希望在循环变量中传递一个变量,如$1+$j-1*500它只是在回显文本,与它所说的完全相同: {12001..12500}
那就是{+12001+…+12500+}它只是在重复文本,它说的正是: {12001..12500}
也就是说{+12001+…+12500+}不要使用for循环来执行此操作。{..}符号没有那么灵活:
i=$((1+(25-1)*500)); while test $i -le $((25*500)); do echo $((i++)); done
不要使用for循环执行此操作。{..}符号没有那么灵活:
i=$((1+(25-1)*500)); while test $i -le $((25*500)); do echo $((i++)); done
大括号展开是在参数、变量和算术展开之前进行的第一次展开。用..支撑扩展。。仅当..之前和之后的值。。是整数或单个字符。由于示例中的算术展开尚未发生,因此它们不是单个字符或整数,因此不会发生大括号展开 使用eval进行算术展开后,可以强制重新展开:
大括号展开是在参数、变量和算术展开之前进行的第一次展开。用..支撑扩展。。仅当..之前和之后的值。。是整数或单个字符。由于示例中的算术展开尚未发生,因此它们不是单个字符或整数,因此不会发生大括号展开 使用eval进行算术展开后,可以强制重新展开: 试试这个
for (( i= $((1+(25-1)*500)); i<=$((25*500)); i++ )); do echo $i; done
试试这个
for (( i= $((1+(25-1)*500)); i<=$((25*500)); i++ )); do echo $i; done
Bash的大括号扩展有局限性。您想要的是以下内容: 上面的循环将覆盖从12001到12500的所有数字 讨论 seq类似于bash的大括号:
$ echo {2..4}
2 3 4
$ echo $(seq 2 4)
2 3 4
seq的关键优势在于,它的参数不仅可以包括算术表达式(如上所示),还可以包括shell变量:
$ x=4; echo $(seq $((x-2)) $x)
2 3 4
相比之下,大括号表示法两者都不接受
seq是一个GNU实用程序,可用于所有linux系统以及最新版本的OSX。较旧的BSD系统可以使用类似的实用程序jot。Bash的brace扩展有局限性。您想要的是以下内容: 上面的循环将覆盖从12001到12500的所有数字 讨论 seq类似于bash的大括号:
$ echo {2..4}
2 3 4
$ echo $(seq 2 4)
2 3 4
seq的关键优势在于,它的参数不仅可以包括算术表达式(如上所示),还可以包括shell变量:
$ x=4; echo $(seq $((x-2)) $x)
2 3 4
相比之下,大括号表示法两者都不接受
seq是一个GNU实用程序,可用于所有linux系统以及最新版本的OSX。较旧的BSD系统可以使用类似的实用程序jot。您查询的功能非常类似于: 大括号展开,{x..y}是在其他展开之前执行的,因此不能将其用于可变长度序列 相反,尝试
对于序列号为$1+25-1*500$25*500的i;不要重复$i;完成您查询的内容与以下内容非常相似: 大括号展开,{x..y}是在其他展开之前执行的,因此不能将其用于可变长度序列 相反,尝试
对于序列号为$1+25-1*500$25*500的i;不要重复$i;完成1+25-1*500等于什么?它与python有什么关系?@AstraBear 1+25-1*500=12001:-P@Linguist是的,这是我的观点。见下面的答案。希望这会有所帮助。对于未来,你应该真正尝试在标题中描述问题,而不是一般的“请帮助”标题,这样回答者就可以更好地了解他们是否能提供帮助。1+25-1*500等于什么?它与python有何关系?@AstraBear 1+25-1*500=12001:-P@Linguist是的,这是我的观点。见下面的答案。希望这会有帮助。以后,你应该真正尝试在标题中描述问题,而不是一般的“请帮助”标题,以便回答者更好地了解他们是否能提供帮助。For循环可以看到重复的问题,但不能使用范围表示法。对于i,以$seq$1+25-1*500$25*500表示;不要重复$i;doneYou可以使用for循环,但不能像op尝试的那样使用大括号扩展。seq唯一的问题是它既不是便携的,也不是标准的。这仅仅是一个例子来展示另一种选择。for循环可以看到重复的问题,但不能使用范围表示法。对于i,以$seq$1+25-1*500$25*500表示;不要重复$i;doneYou可以使用for循环,但不能像op尝试的那样使用大括号扩展。seq唯一的问题是它既不是便携的,也不是标准的。这仅仅是一个展示替代方案的示例。