簡體   English   中英

Bash 腳本“另一種分配數組變量的方法”

[英]Bash Script "another way of assigning array variables"

很容易在周圍找到這個例子:

分配數組變量的另一種方法......

array_name=([xx]=XXX [yy]=YYY ...)

然后他們繼續舉一個簡單的例子。

所以,如果我這樣做:

REM=( [a]=x [1]=y )
echo ${REM[a]}
echo ${REM[1]}

如我所願,它返回 x 和 y。

但如果我這樣做:

REM=( [a]=x [b]=y )
echo ${REM[a]}
echo ${REM[b]}

它返回 y 和 y。 為什么會發生這種情況,我該如何解決?

謝謝。

那是因為您的第二個示例只有一個鍵,即零。 如果你回顯它的鍵,你會看到:

pax> echo ${!REM[@]}
0

此外,如果您回顯第一個示例的鍵,您將看到0 1而不是您預期a 1

這與bash手冊頁中的這個小片段有關(我的重點):

如果使用語法name[subscript]=value分配任何變量,則會自動創建索引數組。 下標被視為必須計算為數字的算術表達式。

但是,你不想索引數組,因為鍵必須是數字。 您需要一個關聯數組,其中鍵可以是字符串,解決方案可以在同一個手冊頁中找到:

要顯式聲明索引數組,請使用declare -a name 關聯數組是使用declare -A name創建的。

因此,您應該使用:

pax> declare -A REM            # Force associative array, not indexed,
pax> REM=( [a]=1 [b]=42 )      # so that keys are strings.

pax> echo ${!REM[@]}           # Keys now correct (though arbitrary order).
b a

pax> echo ${REM[a]}:${REM[b]}  # Values correct as well.
1:42

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM