나는 그것을 사용하고 있다Zsh 매개변수 확장 플래그문자열을 배열로 분할합니다.
이것은 작동합니다:
string="one
two"
array=("${(f)string}")
echo "${array[1]}"
# Returns:
# one
이것은 작동하지 않습니다:
string="one\ntwo"
array=("${(f)string}")
echo "${array[1]}"
# Returns:
# one
# two
\n
확장을 개행 문자로 해석하려면 어떻게 해야 합니까 ?
답변1
매뉴얼 zshexpn
에서는 이러한 작업을 다루고 있습니다. 한 가지 옵션은 e
매개변수 확장 플래그( (f)
분할과 동일한 부분)이지만 e
여러 작업(매개변수 확장, 명령 대체 및 산술 확장)은 생성된 리터럴의 일부로 수행됩니다 \n
. 아니면 이 모든 조작이 일어나기를 원하시나요?
% string="a\nb" ; print -l ${(f)${(e)string}}
a
b
오히려 g
내장된 echo에 의해 처리되는 이스케이프 시퀀스만 처리합니다.
% string="a\nb" ; array=( ${(f)${(g::)string}} ) ; print $array[2]
b
리터럴로만 분할하는 것이 더 정확합니다 \n
.
% string="a\nb" ; print -l ${(s.\\n.)string}
a
b