Pol*_*zi8 5 bash string associative-array
我已经阅读了有关指定“10#”的内容,但我认为这不是我的情况,因为我没有进行数字比较。我正在尝试在 Bash 中创建一个关联数组,直到今天(2021-02-08)代码都运行良好:
dailyData["$today"]="$todayData"
Run Code Online (Sandbox Code Playgroud)
$today 是 ISO 格式的一天, $todayData 不相关。
我收到错误2021-02-08: value too great for base (error token is "08")。
为什么 Bash 将此日期格式解释为数字,其中任意字符串即可完成工作(关联数组键)?
如果我只想使用“08”作为字典键怎么办?
ste*_*ver 11
这是因为dailyData被自动创建为索引数组而不是关联数组。来自man bash:
如果使用语法分配了任何变量,则会自动创建索引数组
name[subscript]=value。下标被视为必须计算为数字的算术表达式。
如果您明确声明dailyData为关联数组,问题就会消失:
$ declare -A dailyData[2021-02-08]="$todayData"
$ declare -p dailyData
declare -A dailyData=([2021-02-08]="" )
Run Code Online (Sandbox Code Playgroud)
我无法重现关联数组的问题:
#! /bin/bash
declare -A dailyData
today=2021-02-08
todayData=whatever
dailyData["$today"]="$todayData"
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用普通数组,即declare -a(注意情况!)或根本没有声明,那么我会收到您提到的错误。那是因为数组索引被解释为算术表达式,所以对于 2021-02-07,它只是计算为 2021 - 2 - 7 = 2012,但是对于 2021-02-08,减法中的最后一个数字在八进制。
| 归档时间: |
|
| 查看次数: |
1064 次 |
| 最近记录: |