매개변수 확장에서 Zsh가 \n을 해석하도록 하는 방법

매개변수 확장에서 Zsh가 \n을 해석하도록 하는 방법

나는 그것을 사용하고 있다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

관련 정보