为什么curl不能在循环内扩展变量,但echo可以?

为什么curl不能在循环内扩展变量,但echo可以?

我需要在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 中使用文件名?

答案1

您引用了*通配符,防止 shell 扩展它。

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

fname变量被赋值为文字文本assets/*.drx。当你使用它时未引用的在 中echo,shell 尽职尽责地扩展了它。

相关内容