반응형
Bash에서 여러 줄 출력을 배열로 캡처
이 질문에 이미 답변이 있습니다.
만약 inner.sh
IS
#...
echo first
echo second
echo third
그리고 outer.sh
이다
var=`./inner.sh`
# only wants to use "first"...
var
공백으로 어떻게 나눌 수 있습니까?
이 시도:
var=($(./inner.sh))
# And then test the array with:
echo ${var[0]}
echo ${var[1]}
echo ${var[2]}
산출:
first
second
third
설명:
var=(first second third)
예 를 들어을 수행하여 bash에서 배열을 만들 수 있습니다 .$(./inner.sh)
런들inner.sh
출력한다 스크립트first
,second
그리고third
별도의 라인을. 주위에 큰 따옴표를 넣지 않았기 때문에$(...)
같은 줄에 뭉쳐 지지만 공백으로 구분되므로 이전 글 머리 기호와 같은 모양이됩니다.
내장을 잊지 마세요 mapfile
. 귀하의 경우에는 확실히 가장 효율적입니다. 전체 파일을 배열로 훑어보고 싶다면 필드가에서 출력되는 줄이 될 ./inner.sh
것입니다.
mapfile -t array < <(./inner.sh)
그런 다음 ${array[0]}
, 등 의 첫 번째 행을 갖게됩니다 .
이 내장 및 가능한 모든 옵션에 대한 자세한 정보는 다음을 참조하십시오.
help mapfile
라는 변수의 첫 번째 줄만 필요하면 다음을 firstline
수행하십시오.
read -r firstline < <(./inner.sh)
이것이 가장 효율적인 방법입니다!
이 작은 벤치 마크는 다음을 증명합니다.
$ time mapfile -t array < <(for i in {0..100000}; do echo "fdjsakfjds$i"; done)
real 0m1.514s
user 0m1.492s
sys 0m0.560s
$ time array=( $(for i in {0..100000}; do echo "fdjsakfjds$i"; done) )
real 0m2.045s
user 0m1.844s
sys 0m0.308s
첫 줄의 첫 번째 단어 (공백 구분 기호 포함) 만으로 출력하려는 경우 ./inner.sh
가장 효율적인 방법은 다음과 같습니다.
read firstword _ < <(./inner.sh)
공백으로 나누는 것이 아니라 개행으로 나누는 것입니다. 이 소용돌이를 줘 :
IFS=$'
'
var=$(./echo.sh)
echo $var | awk '{ print $1 }'
unset IFS
참조 URL : https://stackoverflow.com/questions/13823706/capture-multiline-output-as-array-in-bash
반응형
'IT story' 카테고리의 다른 글
Linux 사용자에게 sudo 액세스 권한을 부여하는 방법은 무엇입니까? (0) | 2021.01.06 |
---|---|
Elmah MVC를 사용하여 프로덕션 서버에서 / elmah에 액세스 할 수 없습니까? (0) | 2021.01.06 |
조각과 활동 간의 통신-모범 사례 (0) | 2021.01.06 |
Javascript로 지리적 위치가 거부되었는지 확인하는 방법이 있습니까? (0) | 2021.01.05 |
Android SearchView에서 키보드를 닫는 방법은 무엇입니까? (0) | 2021.01.05 |