我有一个varsValues.txt文件

cat varsValues.txt
aa=13.7
something=20.6
countries=205
world=1
languages=2014
people=7.2
oceans=3.4

我想创建2个数组,变量和值。它应该包含
echo ${vars[@]}
aa something countries world languages people oceans

echo ${values[@]}
13.7 20.6 205 1 2014 7.2 3.4

我用
Npars=7

readarray -t vars < <(cut -d '=' -f1 varsValues.txt)
readarray -t values < <(cut -d '=' -f2 varsValues.txt)

for (( yy=0; yy<$Npars; yy++ )); do
eval ${vars[$yy]}=${values[$yy]}
done

echo $people
7.2

但是我希望它没有在Mac(os x)和IFS(场间分隔器)上不起作用的readarray。

还有其他解决方案吗? awk? Perl?我可以在我的bash脚本中使用它。

谢谢。

最佳答案

这是awk版本。请注意,NPars不是硬编码的。

vars=($(awk -F= '{print $1}' varsValues.txt))
values=($(awk -F= '{print $2}' varsValues.txt))

Npars=${#vars[@]}

for ((i=0; i<$Npars; i++)); do
    eval ${vars[$i]}=${values[$i]}
done

echo $people

10-08 05:53