여러 텍스트 소스의 첫 번째 줄에서 배열을 만드는 방법은 무엇입니까?

여러 텍스트 소스의 첫 번째 줄에서 배열을 만드는 방법은 무엇입니까?

파일 경로 배열이 있고 각 파일에는 몇 줄의 텍스트가 있습니다. 다음과 같이 처리된 각 파일의 첫 번째 줄로 채워진 배열을 생성하고 싶습니다.

# 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

당신은 그것을 요청했습니다

lines+=("$line")

+=WORD 문자열 연결입니다(또는 보충). ㅏ복합 할당 +=(...)배열에 값을 추가합니다.

여기에서 모든 변수 확장을 인용할 수도 있습니다. line줄에 공백이 포함된 경우 반드시 필요하지만 다른 곳에서도 문제가 발생할 수 있습니다.

답변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: 읽은 각 줄에서 후행 줄 바꿈을 제거합니다.

관련 정보