我正在尝试一次性检查 apache 的 mod-status 页面是否有这样的更新(这只是一个测试脚本):
firstcontent=$(lynx -dump http://some-server/server-status-page)
echo $firstcontent > /tmp/myfirstcontentfiles.txt
nextcontent=$(lynx -dump http://some-server/server-status-page)
prevcontent=`cat /tmp/myfirstcontentfiles.txt`
#this always returns false, but their contents are same
if [ "$prevcontent" == "$firstcontent" ]; then echo "match"; fi
#but this returns true
if [ "$nextcontent" == "$firstcontent" ]; then echo "match"; fi
我的问题是为什么 $prevcontent 和 $firstcontent 比较返回 false,而我应该获得真实的返回值?当我将其保存在文件中时,幕后发生了什么吗?
答案1
读为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?了解原因。 1 句话版本是:始终在变量替换周围使用双引号。
echo "$firstcontent" >/tmp/myfirstcontentfiles.txt
大多数情况下有效:它不会折叠变量值中的空格或展开通配符。然而,这仍然会删除尾随的空行(命令替换可以做到这一点),并且在某些 shell 中,该echo
命令会扩展反斜杠。在脚本中,将命令的原始输出写入文件的最简单方法是在它到达 shell 之前执行此操作:
firstcontent=$(lynx -dump http://some-server/server-status-page | tee /tmp/myfirstcontentfiles.txt)