파일 경로 배열이 있고 각 파일에는 몇 줄의 텍스트가 있습니다. 다음과 같이 처리된 각 파일의 첫 번째 줄로 채워진 배열을 생성하고 싶습니다.
# this.txt first line is [Test this]
# another.txt first line is [Test another]
paths=(
./this/path/this.txt
./another/path/another.txt
)
for i in ${paths[@]}; do
read -r line < $i
lines+=$line
done
배열에서 최대 하나의 값만 얻습니다. for 루프에서 찾고 있는 배열을 가져올 수 없는 것 같습니다. 다양한 변형을 시도했지만 어디에서 잘못되었는지 파악하는 데 어려움을 겪고 있습니다.
답변1
답변2
Bash에서는 행을 배열로 직접 읽을 수도 있습니다. 현재 배열 길이를 ${#lines[@]}
삽입 색인으로 선택하면 여기에 추가할 수 있습니다.
for i in "${paths[@]}"; do
mapfile -t -n 1 -O ${#lines[@]} lines < "$i"
done
요약 발췌
mapfile mapfile [-n count] [-O origin] [-t] [array]
표준 입력의 행을 인덱스 배열 변수로 읽습니다.대량으로[…]. 옵션이 제공되는 경우 다음과 같은 의미를 갖습니다.
-n
: 대부분의 사본계산철사. 만약에계산0이면 모든 행이 복사됩니다.
-O
: 할당 시작대량으로색인에서기원. 기본 인덱스는 0입니다.
-t
: 읽은 각 줄에서 후행 줄 바꿈을 제거합니다.