어떤 루핑 기술을 사용하든 변수는 항상 비어 있습니다.

어떤 루핑 기술을 사용하든 변수는 항상 비어 있습니다.

라는 파일이 있고 dependencies그 내용은 다음과 같습니다.

blog
forms
geo
ticketing

build.sh루프를 반복해야 하는 스크립트가 있습니다 . 이 빌드 스크립트는 Docker 컨테이너 내에서 실행됩니다. 저는 이 파일의 줄을 반복하는 여러 가지 방법을 테스트했습니다.

#!/bin/bash

while IFS= read -r dep || [ -n "$dep" ]
do
    echo $dep # empty
done < /path_to_dependencies

또는

$( cat /path_to_dependencies ) |
while read dep;
do
    echo $dep # empty
done

또는

for dep in `cat /path_to_dependencies`
do
    echo $dep # empty
done

또는

while read dep;
do
   echo $dep # empty
done <<< "$( cat /path_to_dependencies )"

이 문제의 원인은 무엇입니까? 내 우분투에서 문제 없이 파일 내용을 반복할 수 있습니다.

답변1

첫 번째 코드 예제가 저에게 효과적이었습니다. 내가 코드를 갖고 있을 때~해야 한다작동하지만 작동하지 않습니다. 가장 간단한 형식으로 시작했습니다.

while read dep
do
    echo "$dep"
done < ./dependencies

( dependencies편의를 위해 파일은 동일한 디렉토리에서 시작됩니다.) 귀하의 예가 나올 때까지
추가 항목을 추가했습니다 .read

while IFS= read -r dep || [ -n "$dep" ]
do
    echo "$dep"
done < ./dependencies

단순화된 버전과 이 버전 모두 다음과 같은 결과를 제공합니다.

blog
forms
geo
ticketing

그래서 코드를 가장 간단한 형태로 줄이고, 작동이 멈추는 부분에 도달한 다음 집중할 수 있을 때까지 추가 부분을 한 번에 입력하는 것이 좋습니다.

관련 정보