Bash字符串比较给出错误的值



我有以下bash脚本,应该下载当前维基百科ZIM文件,如果文件大小不同:

#!/bin/bash
wikipedia_current_filesize=$(stat -c %s wikipedia.zim)
wikipedia_download_filesize=$(curl -s -L -I https://download.kiwix.org/zim/wikipedia_de_all_maxi.zim | gawk -v IGNORECASE=1 '/^Content-Length/ { print $2 }')
echo "Wikipedia filesize [current / download]:"
echo "$wikipedia_current_filesize / $wikipedia_download_filesize"
if [ "$wikipedia_current_filesize" != "$wikipedia_download_filesize" ]
then
echo "Downloading newer version of Wikipedia..."
else
echo "No new version for Wikipedia available."
fi

输出为:

Wikipedia filesize [current / download]:
38095908569 / 38095908569
Downloading newer version of Wikipedia...

数字完全相同。为什么我仍然进入if而不是else分支?我比较字符串的方式不对吗?也许有一个更有意义的方式,例如通过比较整数而不是字符串?

HTTP响应使用rn行结尾。

gawk的默认记录分隔符是newline,它将回车作为一个普通字符留在最后一个字段中。可以去掉尾随回车

wikipedia_download_filesize=$(
curl -s -L -I https://download.kiwix.org/zim/wikipedia_de_all_maxi.zim 
| gawk -v IGNORECASE=1 '/^Content-Length/ { print gensub(/r$/, "", 1, $2) }'
)

或者,更尴尬的

wikipedia_download_filesize=$(
curl -s -L -I https://download.kiwix.org/zim/wikipedia_de_all_maxi.zim 
| gawk -v IGNORECASE=1 -v RS='rn' '/^Content-Length/ { print $2 }'
)

相关内容

  • 没有找到相关文章

最新更新