이 명령은 단일 숫자 인수를 사용하여 수식을 기반으로 요일을 인쇄합니다.

이 명령은 단일 숫자 인수를 사용하여 수식을 기반으로 요일을 인쇄합니다.
days=('Sunday''Monday')
days=('Tuesday''Wednesday')
days=('Thursday''Friday')
days=('Saturday')

for numbers in "S@";

do
        if [ $numbers -ge 0 ];
        then
                result=$(($numbers % 7))
                echo ${days[$result]}
        fi
shift
done

이것이 내가 지금까지 얻은 것입니다.

답변1

배열을 선언하는 데 문제가 있습니다.

days=('Sunday''Monday')          # this means days[0]="SundayMonday"
days=('Tuesday''Wednesday')      # this means days[0]="TuesdayWednesday"
days=('Thursday''Friday')        # this means days[0]="ThursdayFriday"
days=('Saturday')                # this means days[0]="Saturday"

당신은 이것을 원합니다 :

days=(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)

필요한 경우 날짜 이름을 인용할 수 있습니다. 쉘 확장이 발생하지 않기 때문에 쉘은 신경 쓰지 않습니다.

다음

for numbers in "S@";

S이는 필수 달러 기호가 아닌 대문자입니다 $. 따라서 루프를 통과하는 처음이자 유일한 시간의 값은 $numbers2문자열이 됩니다.S@

그 외에는 꽤 좋아 보입니다.

조금 까다로운 것:

  • 세미콜론으로 줄을 끝낼 필요는 없습니다.
  • "숫자"는 잘못된 변수 이름입니다. 숫자만 보유할 수 있습니다.
  • bash는 각인 없이 산술 표현식의 변수를 확장합니다.

    result=$((numbers % 7))
    echo "${days[result]}"
    
  • 위치 매개변수를 반복하는 경우 이를 인용할 필요가 없습니다.

    for number do echo "${days[number % 7]}"; done
    

나는 그것을 쉘 함수로 작성하겠습니다.

day_of_week() {
    local dow=$1
    if [[ $dow -lt 0 ]]; then 
        echo "error: pass a positive number"
        return 1
    fi
    local days=(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
    echo "${days[dow]}"
}

관련 정보