Variable

為什麼 curl 不能在循環內擴展變數,但 echo 可以?

  • February 22, 2019

我需要在 curl 中包含變數

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

似乎 curl 使用 glob 表達式,但 echo 使用實際文件名。為什麼 curl 會有這樣的行為?為什麼 echo 會看到實際變數以及如何在 curl 中使用文件名?

您引用了*萬用字元,防止外殼擴展它。

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

fname變數被分配了文字文本assets/*.drx。當你在 中使用它時,shell 會盡職地擴展它*。*echo

引用自:https://unix.stackexchange.com/questions/502381