「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進数ではないためです。