각 단어가 배열 요소가 되도록 공백으로 구분된 여러 단어가 포함된 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 )
.