ループ内で拡張変数をカールできないのですが、なぜエコーはできますか?

ループ内で拡張変数をカールできないのですが、なぜエコーはできますか?

カールに変数を含める必要があります

for fname in "assets/*.drx"; do
    echo $fname
    curl -F file=@"$fname" "http://someurl.com/"    
    echo $fnamename
done

結果:

assets/5baa5caa414f1d7786e86d03_1545903119.11.drx
curl: (26) couldn't open file "assets/*.drx"
assets/5baa5caa414f1d7786e86d03_1545903119.11.drx

カールはglob式を使用しているように見えますが、echoは実際のファイル名を使用します。カールはなぜこのように振る舞うのですか? echoが実際の変数を見る理由とカールでファイル名を使用する方法は?

ベストアンサー1

ワイルドカードを引用して*シェルが拡張されないようにしました。

for fname in assets/*.drx; do
    printf '%s\n' "$fname"
    curl -F file=@"$fname" "http://someurl.com/"    
done

変数fnameに値が割り当てられます。言葉テキストassets/*.drx。使用するとき引用しないでは、echoシェルはこれを忠実に拡張します。

おすすめ記事