다음 코드를 사용하여 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[@]}"