当在不同函数内声明数组时,使用路径名作为关联数组中的键不起作用

Using pathname as a key in an associative array does not work when array is declared inside of a different function

长期听众,第一次来电: 所以,假设,无论出于何种原因,我真的想使用文件名作为关联数组中的键,例如 /dev/sda。出于某些邪恶的原因,如果我在单独的函数(例如 init 函数)中声明数组,

somefunction() { declare -A driveArray; }
somefunction

然后,在另一个函数中(甚至在函数外部),当我试图将一些东西作为一个字符串引用的键归档时,它不幸地失败了,而这个字符串恰好也对应于一个路径

drv="/dev/sda"               # or ${"/dev/sda"} or without quotes.  
driveArray[$drv]=$(readSMART $drv)

# or if I do it like this
for _isd3 in "${!_tmpsmarts[@]}"; do 
    local _sfile="${_tmpsmarts[$_isd3]}";
    driveARRAY[${_isd3}]=$(< $_sfile); 
    rm $_sfile; 
done;

坦率地说,如果我以引用路径的任何方式进行操作,我总是很有趣:

./testbed.sh: line 177: /dev/sda: syntax error: operand expected (error token is "/dev/sda")

与此同时,将声明剪切并粘贴到函数外部,然后效果很好。

好吧,这只花了我整整 3 个小时。在项目的这一点上,从头开始学习 python 并使用它会更容易。什么,祈祷告诉,这里可能有什么区别?? 另外,为了节省大家的时间,我并没有忘记你们会在这里工作,但我需要通过参考来传递东西,或者至少,我想要,所以,这就是我们在一起的地方那。

declare 在函数中的作用类似于 local;该变量仅存在于函数范围内。 -g 选项使其成为全局定义。

somefunction() { declare -gA driveArray; }