>

i 라는 두 개의 반복자를 인쇄하고 싶습니다  그리고 j  중첩 된 for loops 의  그들이 같지 않을 때마다. 오류 메시지 :

와이즈 비즈

syntax error near unexpected token `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

    와이즈 비즈

    특별한 순서없이

    What have I done wrong?

    가 없었습니다  또는 첫 번째 줄과 동일합니다.

    실패한 실제 스크립트를 게시하지 않은 것 같습니다. (여기에있는 것은 구문 상 정확합니다.)

    #!/bin/bash 변수를 큰 따옴표로 묶지 않았습니다.   "$n" 대신 .

    $n 대신 평가에 쓸모없는 백틱을 사용하고 있습니다 .

    https://shellcheck.net/에서 코드를 테스트하지 않았습니다

    쉽게 읽을 수 있도록 코드 블록을 들여 쓰지 않았습니다.

    배열에 요소를 추가하는 경우 $( ...) 를 사용하십시오. . 코드에있는 것은 마지막 요소에 대한 문자열 연결입니다.

    (신규) 첫 번째 블록에서 요소 (0 .. n-1)에 할당하지만 나중에 요소 (1 .. n)를 사용합니다.

    (새로운) 두 번째 블록에서는 배열 요소보다는 불평등에 대한 지수를 비교합니다. array+=($num) 를 비교하려고 했습니까?  (또는, "${array[$i]}" -ne "${array[$j]}" 의 경우  구성, (( ... )) )?

    (이들 중 일부는 필수 코딩 규칙보다는 좋은 습관임을 지적해야합니다.)

    제안이 적용된 코드는 다음과 같습니다.

    array[i] != array[j]
    
    

  • 답변 # 2

    #!/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 의 사용을 제거하겠습니다  for 루프를 사용하여 :

    seq
    
    
    #!/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

  • 이전 security - USB 장치 공격, udev가 커널을 저장할 수 있습니까?
  • 다음 networking - googlecom 우분투 호스트 이름 ping을 확인할 수 없습니다