如何在 bash 中使用 mod 运算符?
Posted
技术标签:
【中文标题】如何在 bash 中使用 mod 运算符?【英文标题】:How to use mod operator in bash? 【发布时间】:2011-08-07 00:15:45 【问题描述】:我正在尝试这样的一行:
for i in 1..600; do wget http://example.com/search/link $i % 5; done;
我想要得到的输出是:
wget http://example.com/search/link0
wget http://example.com/search/link1
wget http://example.com/search/link2
wget http://example.com/search/link3
wget http://example.com/search/link4
wget http://example.com/search/link0
但我实际上得到的只是:
wget http://example.com/search/link
【问题讨论】:
【参考方案1】:你必须把你的数学表达式放在 $(( )) 中。
单线:
for i in 1..600; do wget http://example.com/search/link$(($i % 5)); done;
多行:
for i in 1..600; do
wget http://example.com/search/link$(($i % 5))
done
【讨论】:
双括号内的 $ 符号是不必要的,因为 bash 会自动扩展它在其中找到的任何变量。【参考方案2】:这可能是题外话。但是对于for循环中的wget,你当然可以这样做
curl -O http://example.com/search/link[1-600]
【讨论】:
【参考方案3】:尝试以下方法:
for i in 1..600; do echo wget http://example.com/search/link$(($i % 5)); done
$(( ))
语法对内容进行arithmetic evaluation。
【讨论】:
如果有人需要它来进行数学运算,请注意bash
中的带负数的模运算 只返回余数,不是数学运算模 结果。这意味着,虽然 -12 mod 10
在数学上是 8
,但 bash 会将其计算为 -2
。您可以使用简单的echo $((-12 % 10))
(-2
) 对其进行测试,并与python3 python3 -c "print(-12 % 10)"
(8
) 进行比较。
不要忘记算术构造$(())
会自动扩展变量,因此您不需要$
和i
。这个$((i % 5))
会很好用。【参考方案4】:
for i in 1..600
do
n=$(($i%5))
wget http://example.com/search/link$n
done
【讨论】:
双括号内的 $ 符号是不必要的,因为 bash 会自动扩展它在其中找到的任何变量。以上是关于如何在 bash 中使用 mod 运算符?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ms-access 2007 VBA 中计算 mod 97
如何在 OS X Leopard 上的 bash 脚本中进行日期数学运算?