在 bash 脚本中解析设置文件,其中一些特殊设置是数组
Parsing a settingsfile in bashscript where some special settings are arrays
我对 bash 脚本编写还是很陌生,不知何故我被困住了。
我正在寻找一种干净简单的方法来解析设置文件,其中一些特殊(和已知)设置是数组。
所以设置文件看起来像这样。
foo=(1 2 3 4)
bar="foobar"
到目前为止我想出的最佳解决方案是:
#!/bin/bash
while IFS== read -r k v; do
if [ "$k" = "foo" ]
then
IFS=' ' read -r -a $k <<< "$v"
else
declare "$k"="$(echo $v | tr -d '""')"
fi
done < settings.txt
但我显然混淆了数组类型。据我了解并尝试了 bar="foobar"
部分,这实际上声明了一个数组,可以通过 echo ${bar[0]}
访问,但也可以通过 echo $bar
访问。所以我认为这将是一个索引数组,但错误日志清楚地说明了一些不同的东西:
cannot convert associative to indexed array
如果有人能向我解释一下如何找到合适的解决方案,我会很高兴。
您只获取文件源是否安全?
. settings.txt
这将插入文件的所有行,就好像它们是您当前脚本的行一样。显然,如果文件不如脚本文件本身安全,就会存在安全问题。
我对 bash 脚本编写还是很陌生,不知何故我被困住了。 我正在寻找一种干净简单的方法来解析设置文件,其中一些特殊(和已知)设置是数组。
所以设置文件看起来像这样。
foo=(1 2 3 4)
bar="foobar"
到目前为止我想出的最佳解决方案是:
#!/bin/bash
while IFS== read -r k v; do
if [ "$k" = "foo" ]
then
IFS=' ' read -r -a $k <<< "$v"
else
declare "$k"="$(echo $v | tr -d '""')"
fi
done < settings.txt
但我显然混淆了数组类型。据我了解并尝试了 bar="foobar"
部分,这实际上声明了一个数组,可以通过 echo ${bar[0]}
访问,但也可以通过 echo $bar
访问。所以我认为这将是一个索引数组,但错误日志清楚地说明了一些不同的东西:
cannot convert associative to indexed array
如果有人能向我解释一下如何找到合适的解决方案,我会很高兴。
您只获取文件源是否安全?
. settings.txt
这将插入文件的所有行,就好像它们是您当前脚本的行一样。显然,如果文件不如脚本文件本身安全,就会存在安全问题。