【问题标题】:Shell/Bash - How to save array to file and another file array load?Shell/Bash - 如何将数组保存到文件并加载另一个文件数组?
【发布时间】:2013-09-18 06:13:27
【问题描述】:

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

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

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

【问题讨论】:

  • HERE 是关于类似问题的一些讨论。
  • @ryyker 不一样。
  • @konsolebox - 是的,5 分钟计时器的点击速度比 5 分钟快。我还打算发帖 THIS。它解决了从文件中读取数据的问题。谢谢
  • @ryyker 这不能解决多行数组的问题。
  • @konsolebox - 它确实可以处理多行文件(或数组)。你看了吗? look herehere 两个链接来自同一个帖子。

标签: bash


【解决方案1】:

如果变量的值不在多行中,一个基本且简单的方法是使用 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

【讨论】:

    【解决方案2】:

    这对你有用吗?

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 2016-11-12
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多