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 함수 내에서 변수를 사용하는 경우.

관련 정보