"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진수가 아니기 때문입니다.