bashでmod演算子を使用する方法


168

私はこのような行を試しています:

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

回答:


234

以下を試してください:

 for i in {1..600}; do echo wget http://example.com/search/link$(($i % 5)); done

$(( ))構文はありません算術評価内容のを。


4
誰かが数学演算にこれを必要とする場合、負の数のモジュロ演算はbash 剰余のみ返し数学モジュロ結果は返さないことに注意してください。つまり、数学的に-12 mod 10はですが8、bashはとして計算します-2。あなたはシンプルでそれをテストすることができますecho $((-12 % 10))-2)でそれを比較しますpython3 python3 -c "print(-12 % 10)"8)。
Lirt、

1
算術構造$(())が変数を自動的に展開するので、$withが必要ないことを忘れないでくださいi。これ$((i % 5))は完璧に機能します。
妖怪


30

数式は$(())内に配置する必要があります。

一発ギャグ:

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

13

これはトピックから外れている可能性があります。しかし、wget in forループの場合は、

curl -O http://example.com/search/link[1-600]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.