Bash에서 변수가 비어 있습니다.

Bash에서 변수가 비어 있습니다.

이 코드를 보세요:

    find /Api -mindepth 1 -maxdepth 1  |
    while read DependencyPath;
    do
        DependencyName=$(basename $DependencyPath);
        DependencyOrganization="Api";
        echo $DependencyOrganization - $DependencyName;
    done

출력은 다음과 같습니다.

 - Courses
 - Media
 - Orders
 - Blog

첫 번째 변수( ) DependencyName=$(basename $DependencyPath);는 설정되지만 두 번째 변수( DependencyOrganization="Api")는 설정되지 않습니다.

왜 설정되어 있지 않은지 모르겠습니다. 나는 또한 사용해 보았습니다 bash -x /script. 이것은 로그입니다:

+ find /Api -mindepth 1 -maxdepth 1
+ read DependencyPath
++ basename /Api/Courses
+ DependencyName=Courses
+ DependencyOrganization=Api
+ echo - Courses
- Courses
+ read DependencyPath
++ basename /Api/Media
+ DependencyName=Media
+ DependencyOrganization=Api
+ echo - Media
+ read DependencyPath
- Media

나도 시도해 보았지만 DependencyOrganization=$(echo "Api")작동하지 않습니다.

어떻게 해야 합니까?

고쳐 쓰다 컨테이너 안에서 달리고 있어요. bash에서 직접 실행 docker exec -it container_name bash하면 find -mindepth 1 -maxdepth 1 -type d | while read temp; do name=hi; echo $name; done작동합니다. 그런데 파일로 저장하고 실행하면 ./script빈칸으로 출력됩니다.

답변1

여기에 문제가 있습니다.

우리의 스크립트(빌드 스크립트)는 동적으로 생성됩니다. 스크립트 생성 프로세스의 단계는 다음과 같습니다.

envsubst < /path/to/script/template > /path/to/generated/script

envsubst이는 스크립트 템플릿 내에서 사용되는 모든 변수가 null 값으로 대체됨을 의미합니다 .

예를 들어, 이 콘텐츠가 있으면 생성된 스크립트로 Name=John; echo $John;변환됩니다 .Name=John; echo ;

우리가 생성한 스크립트는 도커 이미지 내에서 실행되므로 이것이 문제인지는 알 수 없습니다. 일부 매개변수를 동적으로 설정하는 스크립트 템플릿이라고 가정해 보겠습니다. 그러나 조사를 해보니 문제가 있다는 것이 분명해졌습니다 envsubst.

그러므로 다음과 같이 사용해야 합니다.

# This line is for envsubst. It won't be expanded, since it's single quotes
Name='$Name'
envsubst < /path/to/script/template > /path/to/generated/script

관련 정보