3

配列をファイルに保存し、別のファイル配列をロードする方法は?

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[@]};

動作しません:-(誰かにもっと良い方法をアドバイスしてください?ありがとう...

4

2 に答える 2

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応じて変更するだけです。

于 2013-09-17T21:48:03.627 に答える
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
于 2013-09-17T21:54:52.547 に答える