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)
必要に応じて日付名を引用できます。シェル拡張が発生しないため、シェルは気にしません。
Next
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]}"
}