我可以使用一条语句将文件读入常规数组:
local -a ary
readarray -t ary < $fileName不会发生的是将文件读入assoc。数组。
我有文件创建的控制权,所以如果可能的话,我想尽可能简单地做没有循环的事情。
因此,文件内容可以按如下方式读入:
keyname=valueInfo但是,如果减少代码,我愿意用另一个字符串替换=,特别是在上面的单行代码中。
还有..。
那么,是否可以使用until或from之类的方法将这样的文件读取到assoc数组中-即读取assoc数组直到它命中一个单词,或者我必须将其作为循环的一部分来执行?
这将允许我在同一个文件中保留许多相似的值,但读取到不同的数组中。
我也看过mapfile,但和readarray做的一样。
终于..。
我正在创建一个选项列表-从其中进行选择-如下所示:
local -a arr=("${!1}")
select option in ${arr[*]}; do
echo ${option}
break
done工作正常-但是显示的列表没有排序。如果可能的话,我想把它整理一下。
希望可以将所有3个问题放在1中,因为问题相似-都在数组上。
谢谢。
发布于 2014-08-12 04:00:21
首先,关联数组是用-A而不是-a声明的
local -A ary如果要在全局范围内声明变量,请在函数外部使用declare:
declare -A ary如果是BASH_VERSION >= 4.2,则使用-g。
如果您的线路有keyname=valueInfo,使用readarray,您可以这样处理它:
readarray -t lines < "$fileName"
for line in "${lines[@]}"; do
key=${line%%=*}
value=${line#*=}
ary[$key]=$value ## Or simply ary[${line%%=*}]=${line#*=}
done也可以选择使用while read循环:
while IFS= read -r line; do
ary[${line%%=*}]=${line#*=}
done < "$fileName"或
while IFS== read -r key value; do
ary[$key]=$value
done < "$fileName"https://stackoverflow.com/questions/25251353
复制相似问题