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

Hap*_*ace 4 zsh array

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

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

Sté*_*las 8

做就是了:

typeset array > file
Run Code Online (Sandbox Code Playgroud)

装载:

source file
Run Code Online (Sandbox Code Playgroud)

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

或者:

print -rl -- ${(qq)array} > file
Run Code Online (Sandbox Code Playgroud)

装载:

eval "array=($(<file))"
Run Code Online (Sandbox Code Playgroud)

对于您的分隔符想法:

print -r -- ${(j[separator])array} > file
Run Code Online (Sandbox Code Playgroud)

装载:

array=("${(@s[separator])"$(<file)"}")
Run Code Online (Sandbox Code Playgroud)

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