Shell脚本中用变量作为curl文件名时出现curl error(26)问题
问题解决:Shell脚本中curl上传图片时变量导致的文件读取错误
错误原因分析
你的脚本存在两处引号使用错误:
DATE_NOW=$(date \"%Y%m%d_%H%M%s\")中多余的转义引号,这会导致date命令的格式参数被错误解析(虽实际输出看似正常,但属于语法错误)。- curl的
-F参数被拆分成多段引号:"file=@/home/user/Documents/ShareX/Screenshots/2023/image_"$DATE_NOW".jpg",这种写法会让shell将字符串拆为三个独立部分,即使变量内容无空格,也会导致curl无法正确识别完整文件路径,从而触发Failed to open/read local data错误。
修正后的脚本
DATE_NOW=$(date "%Y%m%d_%H%M%s") curl -k -4 -v -X POST -H "Authorization: Bearer $API_KEY" -F "file=@/home/user/Documents/ShareX/Screenshots/2023/image_${DATE_NOW}.jpg" "$API_URL"
关键修正点
- DATE_NOW赋值:去掉
date命令参数的转义引号,$(...)内部直接用普通双引号包裹格式字符串即可。 - curl的-F参数:将整个字段值放在一个双引号内,变量直接嵌入其中(用
${DATE_NOW}是为明确变量边界,避免与后续.jpg混淆,属于规范写法)。 - API_URL加引号:给
$API_URL包裹双引号,防止URL含特殊字符(如&、空格)时被shell错误拆分。
内容的提问来源于stack exchange,提问作者elix
相关产品推荐
相关产品推荐

