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);は設定されますが、2番目の変数(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 bashfind -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

おすすめ記事