ZSH에서 문자열을 공백으로 분할

ZSH에서 문자열을 공백으로 분할

반면 file.txt:

first line
second line
third line

이는 다음에 적용됩니다 bash.

while IFS=' ' read -a args; do
  echo "${args[0]}"
done < file.txt

생산

first
second
third

즉, 파일을 한 줄씩 읽을 수 있으며 각 줄에서 공백을 구분 기호로 사용하여 줄을 배열로 더 나눌 수 있습니다. 그러나 에서는 zsh결과가 error: 입니다 read: bad option: -a.

zsh에서와 동일한 목표를 어떻게 달성할 수 있습니까 bash? 여러 가지 해결책을 시도했지만 해결하지 못했습니다.공백을 구분 기호로 사용하여 문자열을 배열로 분할.

답변1

~에서man zshbuiltins, zsh의 읽기가 -A대신 사용됩니다.

read [ -rszpqAclneE ] [ -t [ num ] ] [ -k [ num ] ] [ -d delim ]
     [ -u n ] [ name[?prompt] ] [ name ...  ]
...
       -A     The  first  name  is taken as the name of an array
              and all words are assigned to it.

그래서 명령은

while IFS=' ' read -A args; do
  echo "${args[1]}"
done < file.txt

기본적으로 zsh 배열 번호는 로 시작 1하고 bash 배열 번호는 으로 시작합니다 0.

$ man zshparam
...
Array Subscripts
...
The elements are numbered  beginning  with  1, unless the
KSH_ARRAYS option is set in which case they are numbered from zero.

관련 정보