Shell / Bash - 如何将数组保存到文件和另一个文件数组加载?

时间:2013-09-17 21:45:17

标签: bash

如何将数组保存到文件和另一个文件数组加载?

file1.sh
ARR=("aaa" "bbb" "ccc");
save to file2; # I do not know how :-(

file3.sh
load from file2; # I do not know how :-(
echo ${ARR[@]};

我试过......

file1.sh
declare -a ARR > /tmp/file2

file3.sh
source /tmp/file2
echo ${ARR[@]};

不起作用:-(建议别人更好的方法?谢谢......

2 个答案:

答案 0 :(得分:4)

如果变量的值不在多行中,那么使用set是一个基本而简单的方法:

# Save
set | grep ^ARR= > somefile.arrays
# Load
. somefile.arrays

但是,当然如果您对某些安全敏感还有其他解决方案,但这是最快捷的方式。

多线阵列的更新:

# Save
printf "%s\x00" "${ARR[@]}" > somefile.arrays
# Load
ARR=() I=0
while read -r ARR[I++] -d $'\0'; do continue; done < somefile.arrays

如果您的值在任何地方都没有$'\0',那将会有效。如果他们这样做,您可以使用唯一的$'\0'以外的其他分隔符。只需相应更改\x00$'\0

答案 1 :(得分:0)

这对你有用吗?

a.sh将数组加载到变量ARR

a.sh的内容:

#/bin/sh
ARR=("aaa" "bbb" "ccc")
echo ${ARR[@]};

b.sh来源a.sh并获取相同的变量ARR

b.sh的内容:

#/bin/sh
source a.sh
echo "I am in b.sh"
echo ${ARR[@]};

执行b.sh

./b.sh
I am in b.sh
aaa bbb ccc