0

以下のスクリプトを実行すると、何も出力されません。何が間違っているのですか?

#!/bin/bash
for k in `seq 0 4`
do
for c1 in `seq 1 30`
do
for c2 in `seq $c1 30`
do
for b1 in `seq 1 $c1`
do
for b2 in `seq $b1 $c2`
do
for s1 in `seq 0 (($c1 - $b1))`
do
for s2 in `seq 0 (($c2 - $b2))`
do
    echo "k: $k - c1: $c1 - c2: $c2 - b1: $b1 - b2: $b2 - s1: $s1 - s2: $s2"
done
done
done
done
done    
done
done
4

2 に答える 2

6

seqここでは使用しないでください。それは無意味です。

for ((k=0; k<4; k++)); do
  for ((c1=1; c1<30; c1++)); do
    for ((c2=c1; c2<30; c2++)); do
      for ((b1=1; b1<c1; b1++)); do
        for ((b2=b1; b2<c2; b2++)); do
          for ((s1=0; s1<(c1-b1); s1++)); do
            for ((s2=0; s2<(c2-b2); s2++)); do
              echo "k: $k - c1: $c1 - c2: $c2 - b1: $b1 - b2: $b2 - s1: $s1 - s2: $s2"
            done
          done
        done
      done
    done    
  done
done

seqbash が外部プロセスのフォーク、実行、出力の読み取りなどを行う必要がある外部コマンドです。これにははるかに多くのオーバーヘッドが伴い、すべてのオペレーティング システムに存在する (または同じように動作する) ことさえ保証されていません!

対照的に(( ))、数学コンテキストを作成します。このようなコンテキストでは、 を使用して変数を展開する必要はなく$、従来の整数演算演算子 ( <>++--など) を使用できます。

于 2013-10-09T02:09:05.743 に答える