私は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
読むスペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?理由を調べてください。 1文版は次のとおりです。変数の置換には常に二重引用符を使用してください。
echo "$firstcontent" >/tmp/myfirstcontentfiles.txt
ほとんどの場合動作します。変数の値でスペースを縮小したり、ワイルドカードを拡張したりしません。ただし、この方法はまだ続く空行を削除し(コマンドの置き換えによって可能です)、一部のシェルではこのコマンドがecho
バックスラッシュを拡張します。スクリプトからコマンドの生出力をファイルに書き込む最も簡単な方法は、シェルに到達する前にこれを行うことです。
firstcontent=$(lynx -dump http://some-server/server-status-page | tee /tmp/myfirstcontentfiles.txt)