일부 따옴표(기본적으로 개행 문자가 포함된 실제 문자열) 배열을 파일에 저장하고 싶습니다. 어떻게 구현할 수 있나요? 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 함수 내에서 변수를 사용하는 경우.