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이는 필수 달러 기호가 아닌 대문자입니다 $. 따라서 루프를 통과하는 처음이자 유일한 시간의 값은 $numbers
2문자열이 됩니다.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]}"
}