Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从ini文件提取信息并添加到关联数组(Bash)_Arrays_Linux_Bash - Fatal编程技术网

Arrays 从ini文件提取信息并添加到关联数组(Bash)

Arrays 从ini文件提取信息并添加到关联数组(Bash),arrays,linux,bash,Arrays,Linux,Bash,我被bash脚本绊住了。 我有一个config.ini文件,如下所示: #Username username=user #Userpassword userpassword=password 我正在寻找一个bash脚本来提取这些信息,并将其放入一个关联数组中。我的脚本看起来像: declare -A array OIFS=$IFS IFS='=' grep -vE '^(\s*$|#)' file | while read -r var1 var2 do array+=([$var

我被bash脚本绊住了。 我有一个config.ini文件,如下所示:

#Username
username=user

#Userpassword
userpassword=password
我正在寻找一个bash脚本来提取这些信息,并将其放入一个关联数组中。我的脚本看起来像:

declare -A array
OIFS=$IFS
IFS='='
grep -vE '^(\s*$|#)' file | while read -r var1 var2 
do
    array+=([$var1]=$var2)
done

echo ${array[@]}
但是数组似乎是空的,因为commande echo${array[@]}没有输出

知道为什么我的脚本不起作用吗?感谢您的帮助,并对我的英语不好表示歉意。

常见错误-“grep | while”导致while循环在单独的shell中执行,并且循环中的变量对shell不是全局的。请改用here字符串:

while read -r var1 var2 
do
    array+=([$var1]=$var2)
done <<< $(grep -vE '^(\s*$|#)' file)
读取时-r var1 var2
做
数组+=([$var1]=$var2)
done常见错误-“grep | while”导致while循环在单独的shell中执行,并且循环中的变量对shell不是全局的。请改用here字符串:

while read -r var1 var2 
do
    array+=([$var1]=$var2)
done <<< $(grep -vE '^(\s*$|#)' file)
读取时-r var1 var2
做
数组+=([$var1]=$var2)

done假设文件是可信的(即内容是规范的和已知的),最简单的方法是获取ini文件的源代码,然后直接在脚本中使用变量名:

. config.ini

您可以使用如上所述的句点(.)或源内置命令

假设文件是可信的(即内容是受监管和已知的),最简单的方法是源ini文件,然后直接在脚本中使用变量名:

. config.ini


您可以使用上述句点(.)或源内置命令

您好,Wayne,谢谢您的快速回答。不幸的是,它没有工作$var1变成“username user”,而$var2保持为空。我的代码$var1变成了“用户名”,$var2变成了“用户”。我建议稍微修改一下Wayne的回答:
declare-a array;而IFS==read-r键值;do数组[“$key”]=“$value”;done<在Bash 4.3.30上,here字符串中的无引号扩展中断:输出在
IFS
字符上被拆分,然后用空格组合在一起。在Bash4.4.11上,它是有效的。但是过程替换
<最后我要寻找文件的来源。。。那就简单多了。但是谢谢你的帮助。嗨,韦恩,谢谢你的快速回答。不幸的是,它没有工作$var1变成“username user”,而$var2保持为空。我的代码$var1变成了“用户名”,$var2变成了“用户”。我建议稍微修改一下Wayne的回答:
declare-a array;而IFS==read-r键值;do数组[“$key”]=“$value”;done<在Bash 4.3.30上,here字符串中的无引号扩展中断:输出在
IFS
字符上被拆分,然后用空格组合在一起。在Bash4.4.11上,它是有效的。但是过程替换
<最后我要寻找文件的来源。。。那就简单多了。但是谢谢你的帮助。你为什么不把ini文件和调用用户名或用户密码作为变量来来源呢?哦,是的,我会这样做的。我不知道这是不可能的。我只是在谷歌上看了一下,试过了。。。。这就是我的解决方案。非常感谢grail。@RaphaelVigener它实际上非常简单
。文件
。非常感谢much@grail,将文件源化为脚本的好处是它释放了shell语言的全部功能(包括扩展现有变量),而缺点是它释放了shell语言的全部功能(包括通过命令扩展执行任意命令)。只是一些值得记住的东西。你为什么不把ini文件和调用用户名或用户密码作为变量来源呢?哦,是的,我会这样做的。我不知道这是不可能的。我只是在谷歌上看了一下,试过了。。。。这就是我的解决方案。非常感谢grail。@RaphaelVigener它实际上非常简单
。文件
。非常感谢much@grail,将文件源化为脚本的好处是它释放了shell语言的全部功能(包括扩展现有变量),而缺点是它释放了shell语言的全部功能(包括通过命令扩展执行任意命令)。只是一些值得记住的事情。