【发布时间】:2017-07-02 19:44:43
【问题描述】:
我有 file.properties,其中定义了键和值:
key1=value1 value2 value3
key2=value4 value5 value6
key3=value7 value8 value9
我想将文件中的行加载到数组中。由于 bash 3,我无法使用 declare -A 创建关联数组。
在 bash 4 中,我的代码是:
conf="./file.properties"
init() {
local configiration=$1
if [ -f "$conf" ]
then
while IFS='=' read -r key value
do
configuration[ ${key} ]=$value
done < "$conf"
fi}
declare -A configuration
init configuration
KEY="key value from file"
#KEY="key1" or KEY="key2" or KEY="key3"
SERVERS=${configuration[ $KEY ]}
我想在 bash 3 中做同样的工作。
conf="./file.properties"
init () {
key=()
value=()
if [ -f "$conf" ]
then
while IFS='=' read -r key value
do
key+=("$key")
value+=("$value")
done < "$conf"
fi}
init
KEY="key value from file"
#KEY="key1" or KEY="key2" or KEY="key3"
for ((i = 0; i < ${#key[@]}; i++))
do
if [ "${key[$i]}" == "$KEY" ];
then
echo "values: ${value[i]}"
fi
done
在这两种情况下,我得到相同的输出,例如:
value1 value2 value3
我的 bash 3 代码是否正确或需要修改?
【问题讨论】:
-
当你说
KEY="key value from file"它实际上包含什么?你能提供它以便我们实际测试它吗? -
此外,它无法重现您声称的问题,运行
KEY="key1",KEY="key2",KEY="key3"的bash v3.0代码产生的输出为values: value1 value2 value3,values: value4 value5 value6和values: value7 value8 value9分别!这不是你想做的吗?那你有什么问题? -
如果你只是问你是否用一对索引数组正确模拟了一个关联数组,答案大部分是肯定的。
-
我只是在问它是否正确(不是语法上而是逻辑上)或者它是否会更好。我不是脚本专家