file1
ESX 호스트에 이름이 큰 파일이 있습니다. 파일에 대해 몇 가지 명령을 실행 awk
하고 유용한 데이터 덩어리를 변수로 추출했는데, 이는 비지박스 쉘에서 잘 작동했습니다.
info
이제 해당 변수()를 한 줄씩 읽고, 무언가를 변경하고, 다른 파일에 쓰고 싶습니다 .
info=$(awk '/pat1/{flag=1}/pat2/{flag=0}flag' file1) -> works fine
while IFS= read -r line; do
printf '%s\n' "$line"
done <<< "$info"
그러나 while 루프는 작동하지 않습니다. "예기치 않은 리디렉션" 오류가 발생합니다. 나는 또한 `done << "$info"를 시도했습니다. 그런 다음 오류가 발생합니다.
구문 오류: 예기치 않은 파일 끝('}' 필요)
그렇다면 기본적으로 변수를 한 줄씩 읽는 방법은 무엇입니까?
감사합니다. 답장을 보내주셔서 감사합니다.
답변1
여기서 문자열 리디렉션은 <<<
표준 기능이 아니며 Busybox의 sh는 이를 지원하지 않습니다. 오류 메시지는 약간 이상 하지만 <<
아마도 <
.<<
당신은 다음과 같은 일을해야합니다
echo "$info" | while IFS= read -r line; do
printf '%s\n' "$line"
done
또는 임시 파일을 통해 데이터를 전달합니다.
tmpfile=$(mktemp)
awk '/pat1/{flag=1}/pat2/{flag=0}flag' file1 > "$tmpfile"
while IFS= read -r line; do
printf '%s\n' "$line"
done < "$tmpfile"
rm "$tmpfile"
하지만 보세요내 변수가 하나의 "읽는 동안" 루프에서는 로컬이지만 겉보기에 유사한 다른 루프에서는 로컬이 아닌 이유는 무엇입니까?첫 번째 것을 사용하는 경우.