Bash:日付を配列キーとして使用すると、デフォルト値が大きすぎます。

Bash:日付を配列キーとして使用すると、デフォルト値が大きすぎます。

「10#」指定について読みましたが数値比較をしないので私の場合ではないようです。 Bashで連想配列を生成しようとしていますが、コードは今日(2021-02-08)までうまく機能します。

dailyData["$today"]="$todayData"

$todayはISO形式の日付であり、$todayDataは関係ありません。
エラーが発生します2021-02-08: value too great for base (error token is "08")

Bashがこの日付形式を、ランダムな文字列が操作を実行する数値(連想配列キー)と解釈するのはなぜですか?
「08」を辞書キーとして使用するにはどうすればよいですか?

答え1

dailyData連想配列ではなくインデックス配列で自動生成されるからだ。からman bash

構文を使用して変数を割り当てると、インデックス配列が自動的に生成されますname[subscript]=value。下付き文字は、数値として評価する必要がある算術式として扱われます。

dailyData明示的に連想配列として宣言すると問題は消えます。

$ declare -A dailyData[2021-02-08]="$todayData"

$ declare -p dailyData
declare -A dailyData=([2021-02-08]="" )

答え2

連想配列の問題を再現できません。

#! /bin/bash
declare -A dailyData
today=2021-02-08
todayData=whatever
dailyData["$today"]="$todayData"

ただし、通常の配列を使用するかdeclare -a(例を参照してください)、まったく宣言しないと、上記のエラーが発生します。これは、配列インデックスが算術式として解釈されるため、2021-02-07の場合は2021 - 2 - 7 = 2012と評価されますが、2021-02-08の場合、減算の最後の数字は8進数ではないためです。

関連情報