文字列比較結果が常に間違っているのはなぜですか?

文字列比較結果が常に間違っているのはなぜですか?

私は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)

おすすめ記事