2つの整数変数の比較

2つの整数変数の比較

同じではないたびに、およびiofという名前の2つのjネストされたイテレータを印刷したいと思います。for loopsエラーメッセージ:

予期しないマーカー「then」の近くに構文エラーがあります。

#!/bin/bash
read n
array=()
for i in `seq 1 $n`
do
    read num
    array+=$num
done

count=0
count2=0
countmax=0
for i in `seq 1 $n`; do
    for j in `seq 1 $n`; do
        if [ $i -ne $j ]; then
            echo $i $j
        fi
    done
done

私は何が間違っていましたか?

ベストアンサー1

私は何が間違っていましたか?

順番にリストされていない名前、

  • #!/bin/bash最初の行に対応する項目はありません。
  • 失敗した実際のスクリプトを公開していないようです。 (ここの内容は文法的に正確です。)
  • "$n"代わりに二重引用符で変数を引用しません$n
  • 評価の代わりに役に立たないバックティックを使用してください$( ...)
  • まだコードをテストしていません。https://shellcheck.net/
  • 読みやすくするためにコードブロックをインデントしません。
  • 配列に要素を追加するにはを使用しますarray+=($num)。コードの内容は、最後の要素への文字列連結です。
  • (新規)最初のブロックでは、要素(0..n-1)に割り当て、後で要素(1..n)を使用します。
  • (新しい)2番目のブロックでは、配列要素ではなくインデックスの不平等を比較します。比較"${array[$i]}" -ne "${array[$j]}"(または(( ... ))建設の場合)を意味しますかarray[i] != array[j]

(これらのいくつかは、基本的なコーディング規則ではなく、良いケースであることを指摘したいと思います。)

私の提案が適用されたコードは次のとおりです。

#!/bin/bash
read -p 'Number of elements: ' n

array=(0)    # We don't use element zero
for i in $(seq "$n")
do
    read -p 'Element: ' num
    array+=($num)
done

for i in $(seq "$n")
do
    for j in $(seq "$n")
    do
        # Compare the array elements rather than the indices
        # Is this what you intended?
        if (( array[i] != array[j] ))
        then
            echo "${array[$i]} ${array[$j]}"
        fi
    done
done

おすすめ記事