
いくつかの引用符(デフォルトでは改行文字を含む実際の文字列)の配列をファイルに保存したいと思います。どのように実装できますか? IFSを「xxxxxxxxx74765xxx」(私の文字列には決して表示されません)のように設定しようとしましたが、もちろんIFSは単一文字でのみ機能します。
これを行うには、いくつかの醜いハッキングを考えることができます(たとえば、意味のない文字列を要素間に1行で保存し、ファイルを1行ずつ読み、各行を確認して配列を再構築します)。しかし、経験豊富なコメントに感謝します。
答え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 関数内で変数を使用する場合。