我想在文件中存储一些引号的数组(基本上是带有换行符的真实字符串)。我怎样才能实现它?我想过将 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 的函数内部使用变量。