Bash를 사용하여 파일을 읽는 중 오류가 발생했습니다.

Bash를 사용하여 파일을 읽는 중 오류가 발생했습니다.

다음 코드를 사용하여 bash 스크립트에서 파일을 읽고 싶습니다.

#!/bin/bash

file=$(sort "$1" | cut -f 1 -d "," | uniq -c | sed 's/^ *//g')

while IFS= read -r line
do
    echo "$line"
done < "$file"

하지만 파일 끝에는 항상 다음 오류가 발생합니다.

File name too long

왜 이런 일이 발생합니까? 처음에는 다음과 같은 출력이 표시되지만 원하지 않습니다.

script.sh: line 8:

답변1

처리 후 변수에 file파일 이름이 포함되지 않은 것 같습니다. 명령의 출력을 처리하려면 프로세스 대체를 사용할 수 있습니다 <(...).

#!/bin/bash

while IFS= read -r line; do
  printf '%s\n' "$line"
done < <(sort "$1" | cut -f1 -d, | uniq -c | sed 's/^ *//')

g줄의 시작 부분에서 시작하여 줄당 한 번만 일치하는 공백 수에 관계없이 스크립트의 공백을 제거했습니다 .sed^

답변2

당신이 사용할 수있는여기 문자열whileloop로 리디렉션하기 위해

data=$(sort "$1" | cut -f 1 -d "," | uniq -c | sed 's/^ *//')
while IFS= read -r line; do
    echo "$line"
done <<< "$data"

또는 파이프 출력을 배열로 캡처배열 읽기

readarray -t data < <(sort "$1" | cut -f 1 -d "," | uniq -c | sed 's/^ *//')
for line in "${data[@]}"; do
    echo "$line"
done
# to print without a loop:
printf "%s\n" "${data[@]}"

관련 정보