두 정수 변수 비교

두 정수 변수 비교

동일하지 않을 때마다 i및 of라는 이름의 두 개의 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)을 사용합니다.
  • (새) 두 번째 블록에서는 배열 요소가 아닌 인덱스의 불평등을 비교합니다. 비교 "${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

답변2

seq또한 for 루프를 사용하여 사용을 제거합니다.

#!/bin/bash

read -p 'Number of elements: ' n

array=(0)
for (( i = 1; i <= n; i++ ))
do
    read -p 'Element: ' num
    array+=("$num")
done

for (( i = 1; i <= n; i++ ))
do
    for (( j = 1; j <= n; j++ ))
    do
        (( array[i] != array[j] )) && echo "${array[i]} ${array[j]}"
    done
done

관련 정보