是声明 - Bash 关联数组中强制显式声明?

问题描述 投票:0回答:1

我已经定义了一个 bash 关联数组,而没有显式的声明 -A 命令。但我不确定它是否真的是关联数组,因为我在没有声明 -A 的地方读到过,该数组被 Bash 视为索引数组。

我尝试了以下代码:

players=([tennis]=fedExpress [cricket]=buzz [football]=cr7)
echo "${players[tennis]}"

o/p 是:cr7 但应该是 fedExpress

但是在极客的极客文章中,他们声明了一个索引数组,如下所示:

ARRAYNAME=([1]=10 [2]=20 [3]=30)

那么,如果没有声明-A,玩家的数组是否也被视为索引数组?或者关联数组? 请澄清这一点。我正在写一篇文章,所以我必须证实我所写的内容。

arrays bash shell associative-array declare
1个回答
0
投票

在 Bash 的关联数组中声明 -A 显式声明是强制的吗?

是的。

如果没有声明-A,玩家的数组是否也被视为索引数组?还是关联数组?

已索引。您不需要我们这样做 - 使用

declare -p
检查具有所有标志的变量。

[this]
内的字符串被视为算术表达式(除非它是关联数组)。算术表达式内部未定义的变量等于 0,即
echo $((something))
输出
0
,请参阅文档。以下带有未定义变量
tennis
cricket
football
:

 players=([tennis]=fedExpress [cricket]=buzz [football]=cr7)

仅等于:

players=([0]=fedExpress [0]=buzz [0]=cr7)

但是,请考虑:

$ tennis=123
$ cricket=123*2
$ players=([tennis]=fedExpress [cricket]=buzz [football]=cr7)
$ declare -p players
declare -a players=([0]="cr7" [123]="fedExpress" [246]="buzz")
© www.soinside.com 2019 - 2024. All rights reserved.