다음은 출력 my_command
을 행 배열로 그룹화한다고 생각했습니다 .
IFS='\n' array_of_lines=$(my_command);
그래서 $array_of_lines[1]
출력의 첫 번째 행을 참조 할 것 my_command
, $array_of_lines[2]
두 번째, 세 번째, 그리고.
그러나 위의 명령이 제대로 작동하지 않는 것 같습니다. 내가 확인 한대로 my_command
문자 주위 의 출력을 분할하는 것처럼 보입니다 . 배열의 요소를 한 줄씩 인쇄한다고 생각합니다. 나는 또한 이것을 확인했다 :n
print -l $array_of_lines
echo $array_of_lines[1]
echo $array_of_lines[2]
...
두 번째 시도에서 추가 eval
가 도움이 될 수 있다고 생각했습니다 .
IFS='\n' array_of_lines=$(eval my_command);
그러나 나는 그것없이와 동일한 결과를 얻었습니다.
마지막으로 zsh에 공백이있는 List 요소 에 대한 답변에 IFS
따라 입력을 나누고 요소를 배열로 수집하는 방법을 zsh에 알려주는 대신 매개 변수 확장 플래그를 사용해 보았습니다 .
array_of_lines=("${(@f)$(my_command)}");
하지만 난 여전히 (분할가 일어나고 같은 결과를 얻었다 n
)
이것으로 다음과 같은 질문이 있습니다.
Q1. 여러 줄로 된 명령의 출력을 수집하는 "적절한" 방법은 무엇입니까 ?
Q2. 줄 IFS
바꿈 만 나누도록 지정 하려면 어떻게해야 합니까?
Q3. 위의 세 번째 시도에서와 같이 매개 변수 확장 플래그를 사용하여 (예 @f
:) 분할을 지정하면 zsh는 IFS
? 왜 위에서 작동하지 않았습니까?
"${(@f)...}"
와 동일${(f)"..."}
하지만 다른 방식입니다.(@)
큰 따옴표 안에는 "배열 요소 당 하나의 단어를 생성"을(f)
의미하고 "개행으로 배열에 분리 "를 의미합니다. 추신 : 문서에