如何将 zsh 字符串数组存储(和加载)到文件中?

如何将 zsh 字符串数组存储(和加载)到文件中?

我想在文件中存储一些引号的数组(基本上是带有换行符的真实字符串)。我怎样才能实现它?我想过将 IFS 设置为类似“xxxxxxxxx74765xxx”(这永远不会出现在我的字符串中),但是当然,IFS 仅适用于单个字符。

我可以想到一些丑陋的黑客来做到这一点(例如,将无意义的字符串存储为元素之间的一行,逐行读取文件并检查每一行,然后重建数组。),但我会欣赏更多有经验的意见。

答案1

做就是了:

typeset array > file

加载:

source file

(您还可以用来typeset -p array保存数组变量的属性(导出的、唯一的...))。

或者:

print -rl -- ${(qq)array} > file

加载:

eval "array=($(<file))"

为您分隔器主意:

print -r -- ${(j[separator])array} > file

加载:

array=("${(@s[separator])"$(<file)"}")

(但请注意,它会从数组的最后一个元素中删除所有尾随换行符,并且它不适用于空数组)。

答案2

他们俩便携的(ksh、zsh、bash)AFAICT 解决方案是:

 typeset -p arr >./file              # save array
 . ./file                            # read array

printf '%q\n' "${arr[@]}" >./file    # save array
eval "arr=( $(< ./file) )"           # read array

请注意,第一个解决方案将创建一个当地的如果在 bash 的函数内部使用变量。

相关内容