テキストファイルの一意の内容を等しく登録されていない予想文字列と比較します。

テキストファイルの一意の内容を等しく登録されていない予想文字列と比較します。

どの「.err」テキストファイルが空であるかを確認するためにシェルスクリプトを作成しました。一部のファイルには、次のサンプルファイルに示すように、特定の繰り返しフレーズがありますfake_error.err(意図的に使用されている空白行)。


WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

WARNING: reaching max number of iterations

空のファイル以外に削除したいです。これを行うには、次のスクリプトを作成しました。

#!/bin/bash

for file in *error.err; do
    if [ ! -s $file ]
    then
        echo "$file is empty"
        rm $file
    else
        # Get the unique, non-blank lines in the file, sorted and ignoring blank space
        lines=$(grep -v "^$" "$file" | sort -bu "$file")
        echo $lines

        EXPECTED="WARNING: reaching max number of iterations"
        echo $EXPECTED

        if [ "$lines" = "$EXPECTED" ]
        then
            # Remove the file that only has iteration warnings
            echo "Found reached max iterations!"
            rm $file
        fi

    fi
done

ただし、ファイルで実行されると、このスクリプトの出力は次fake_error.errのようになります。

WARNING: reaching max number of iterations
WARNING: reaching max number of iterations

ループの2つのステートメントで実行されますが、$echoファイル自体は削除されず、"Found reached max iterations!"文字列も印刷されません。問題はif [ "$lines" = "$EXPECTED" ]二重括弧を試してみましたが、うまくいかないことです[[ ]]==私はこれら2つの印刷されたステートメントの違いが何であるかわかりません。

2つの変数が同じではないのはなぜですか?

関連情報