当在不同函数内声明数组时,使用路径名作为关联数组中的键不起作用
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; }
长期听众,第一次来电: 所以,假设,无论出于何种原因,我真的想使用文件名作为关联数组中的键,例如 /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; }