찾을 수 없으며 잘못된 교체 오류

찾을 수 없으며 잘못된 교체 오류

이것은 사용자가 n개의 숫자를 입력하여 숫자가 홀수인지 짝수인지 알아내는 데 사용되는 스크립트 코드입니다. 하지만 내 배열이 작동하지 않는 것 같습니다.

#!/bin/sh
echo "Enter the value of n:"
read n
e=0
o=0
while [ $n -gt 0 ]
do
    echo "Enter the number:"
    read a
    t=`expr $a % 2`
    if [ $t -eq 0 ]
    then
        even[e]=$a
        e=`expr $e + 1`
    else
        odd[o]=$a
        o=`expr $o + 1`
    fi
    n=`expr $n - 1`
done
echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"
exit 0

다음과 같은 오류가 발생합니다.

test.sh: 15: test.sh: odd[o]=1: not found
test.sh: 12: test.sh: even[e]=2: not found
test.sh: 20: test.sh: Bad substitution

오류는 어디에 있으며 왜 발생합니까?

답변1

실행 중인 스크립트는 /bin/sh배열을 전혀 지원하지 않습니다. bash반면에 껍질은 그렇습니다.

expr또한 산술 연산 과 같이 다소 오래된 구문을 사용하고 있습니다 .

다음은 다음을 위해 작성된 스크립트 버전입니다 bash.

#!/bin/bash

read -p 'Enter n: ' n

while (( n > 0 ))
do
    read -p 'Enter number: ' a

    if (( a % 2 == 0 ))
    then
        even+=( "$a" )
    else
        odd+=( "$a" )
    fi
    n=$(( n - 1 ))
done

echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"

주요 변경 사항에는 산술 평가, 산술 대체, 사용자에게 힌트 제공, 배열에 요소 추가 및 불필요한 변수 제거를 위한 #!뾰족한 선 수정이 포함됩니다.bash(( ... ))$(( ... ))read -p+=(...)


명령줄에서 숫자를 가져오는 이 스크립트의 비대화형 버전:

#!/bin/bash

for number do
    if (( number % 2 == 0 )); then
        even+=( "$number" )
    else
        odd+=( "$number" )
    fi
done

printf 'The even numbers: %s\n' "${even[*]}"
printf 'The odd numbers: %s\n'  "${odd[*]}"

시험:

$ bash script.sh 1 2 3 4
The even numbers: 2 4
The odd numbers: 1 3

관련 정보