我想创建一个简单的函数,该函数打印带有通过curl访问的适当标签的文件的大小。这就是我的.zshrc
配置中包含的内容:
function curl-size {
BYTELENGTH=$(curl -sI $1 | grep -i Content-Length | awk '{print $2}')
if (($BYTELENGTH>1000000000));then
VALUE=$(echo "scale=3;$BYTELENGTH/1000000000" | bc -l)
LABEL="gb"
elif (($BYTELENGTH>1000000));then
VALUE=$(echo "scale=3;$BYTELENGTH/1000000" | bc -l)
LABEL="mb"
elif (($BYTELENGTH>1000));then
VALUE=$(echo "scale=3;$BYTELENGTH/1000" | bc -l)
LABEL="kb"
else
VALUE=$BYTELENGTH
LABEL="bytes"
fi
echo $(echo "$VALUE" | grep -o '.*[1-9]') $LABEL
}
尝试在终端中使用curl-size https://i.imgur.com/A8eQsll.jpg
返回
curl-size:2: bad math expression: illegal character: ^M
curl-size:5: bad math expression: illegal character: ^M
curl-size:8: bad math expression: illegal character: ^M
curl-size:12: bad math expression: illegal character: ^M
答案 0 :(得分:2)
^M
是否则称为回车符的字符,也就是说,指示光标返回到当前行的开头。在DOS衍生平台上,文本文件的行以<CR><LF>
序列分隔(而在UNIX系列平台上,文本文件的行以终止仅由<LF>
开头;请注意,这意味着在UNIX上,文本文件的最后一行应在结尾处具有<LF>
,以使最后一行有效,而在Windows上,尾随的{{1 }}在文件末尾产生一个空行。
如果您要与<CR><LF>
连接的Web服务器返回的内容是DOS换行符,则这些回车将被视为内容而不是代码。效率低下但可行的修复可能如下所示:
curl
请注意,在为符合POSIX的shell编写脚本时,对您自己的变量使用全大写字母名称是个坏主意-通过standard-mandated convention保留小写名称供应用程序使用,并专门使用全大写字母-为修改其行为的变量使用caps命名空间-但zsh 不符合POSIX,并且不遵循此约定,因此该指南不适用于此。