여러 단어를 포함하는 Zsh 문자열 변수를 배열에 할당해야 합니다.

여러 단어를 포함하는 Zsh 문자열 변수를 배열에 할당해야 합니다.

각 단어가 배열 요소가 되도록 공백으로 구분된 여러 단어가 포함된 Zsh 문자열 변수를 배열에 할당하는 방법

s='run help behind me'
a=($s)
m=${a[0]}
n=${a[1]}
print "m=$m"
echo n=$n

m=
n=run help behind me

헷갈리네요, 너무 간단하지만 여전히 할 수가 없어요.. 정말 도와주세요

답변1

많은 쉘과 달리 zsh는 기본적으로 변수 확장 중에 토큰화를 수행하지 않습니다. 에서 설명한 대로 수정자를 man zshexpn사용하여 =분할을 활성화할 수 있습니다.

   ${=spec}
          Perform  word splitting using the rules for SH_WORD_SPLIT during
          the evaluation of spec, but regardless of whether the  parameter
          appears  in  double  quotes; if the `=' is doubled, turn it off.
          This forces parameter expansions to be split into separate words
          before  substitution, using IFS as a delimiter.  This is done by
          default in most other shells.

그것은 a=( ${=s} )또는 입니다 a=( $=s ). 또한 zsh 배열 인덱스는 0이 아닌 1부터 시작한다는 점을 기억하세요.

a=( $s )¹ 과 같은 문자는 특수 문자 bash와 관련된 복잡한 규칙에 따라 $IFS분할됩니다 . 다음을 사용하여 주어진 문자열을 기준으로 분할할 수도 있습니다.s 매개변수 확장 플래그:

a=( ${(s[ ])s} ) # split $s on spaces only, discarding empty elements
a=( "${(@s[ ])s}" ) # split $s on spaces, preserving empty elements

당신은 또한 볼 수 있습니다zsh에서 변수 확장.


1 그러나 연산자 bash도 필요하다는 ~점을 기준으로 와일드카드를 사용하지 않는다는 점에 유의하세요 a=( $=~s ).

관련 정보