esx busybox 쉘 스크립트, while을 사용하여 변수에서 한 줄씩 읽기

esx busybox 쉘 스크립트, while을 사용하여 변수에서 한 줄씩 읽기

file1ESX 호스트에 이름이 큰 파일이 있습니다. 파일에 대해 몇 가지 명령을 실행 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"

하지만 보세요내 변수가 하나의 "읽는 동안" 루프에서는 로컬이지만 겉보기에 유사한 다른 루프에서는 로컬이 아닌 이유는 무엇입니까?첫 번째 것을 사용하는 경우.

관련 정보