このコマンドは、単一の数値引数を使用して式に基づいて曜日を印刷します。

このコマンドは、単一の数値引数を使用して式に基づいて曜日を印刷します。
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これは必須ドル記号ではなく大文字です$。したがって、ループを通過する最初で唯一の時間の値は$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]}"
}

おすすめ記事