HappyFace Asked: 2018-12-06 12:11:37 +0800 CST2018-12-06 12:11:37 +0800 CST 2018-12-06 12:11:37 +0800 CST 如何将 zsh String 数组存储(和加载)到文件中? 772 我想在一个文件中存储一组引号(基本上是带有新行的真实字符串)。我怎样才能实现它?我曾想过将 IFS 设置为“xxxxxxxxx74765xxx”之类的东西(它永远不会出现在我的字符串中),但当然,IFS 仅适用于单个字符。 我可以想到一些丑陋的黑客来做到这一点(例如,将无意义的字符串存储为元素之间的一行,逐行读取文件并检查每一行,然后重建数组。),但我会更感激一些有经验的意见。 zsh array 2 个回答 Voted Best Answer Stéphane Chazelas 2018-12-06T12:32:13+08:002018-12-06T12:32:13+08:00 做就是了: 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)"}") (虽然要注意它会从数组的最后一个元素中删除所有尾随换行符,并且它不适用于空数组)。 user232326 2018-12-07T01:17:59+08:002018-12-07T01:17:59+08:00 AFAICT的两个可移植(ksh、zsh、bash)解决方案是: typeset -p arr >./file # save array . ./file # read array 和 printf '%q\n' "${arr[@]}" >./file # save array eval "arr=( $(< ./file) )" # read array 请注意,如果在 bash 中的函数内部使用,第一个解决方案将创建一个局部变量。
做就是了:
装载:
(您也可以使用
typeset -p array
来保存数组变量的属性(导出的、唯一的...))。或者:
装载:
对于您的分隔符想法:
装载:
(虽然要注意它会从数组的最后一个元素中删除所有尾随换行符,并且它不适用于空数组)。
AFAICT的两个可移植(ksh、zsh、bash)解决方案是:
和
请注意,如果在 bash 中的函数内部使用,第一个解决方案将创建一个局部变量。