同じではないたびに、およびi
ofという名前の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