bashの文字列比較の否定は奇妙に動作しますか?

bashの文字列比較の否定は奇妙に動作しますか?

この小さなbashスクリプトがあります。

readonly imagick_extension=$(cat "${php_configuration_file}" | grep imagick)
echo "Imagick extension grep value: $imagick_extension"
if [ "${imagick_extension}" != "extension=imagick.so" ]; then
        echo "ERROR: Imagick PHP extension is not enabled!"
        exit 1
fi
echo "Imagick PHP extension is enabled."

出力は次のとおりです

Imagick extension grep value: extension=imagick.so
ERROR: Imagick PHP extension is not enabled!

どうやってこれができますか?

  • 変数の値を示します。はい extension=imagick.so

  • しかし、まだif句を入力してください。満足する場合にのみif句を入力する必要があります。いいえ extension=imagick.so

よろしくお願いします!

答え1

ここでの問題は、Windowsで生成されたPHPプロファイルがあることです。したがって、行末はUNIX標準LFではなくCR / LFです。

echo次のようにコマンドを変更してこれを実演できます。

echo "Imagick extension grep value: < $imagick_extension >"

のようにコメント出力の最後のスペースが行の>先頭にあることがわかります。これは実際には値に改行文字が含まれていることを示します。

 >agick extension grep value: extension=imagick.so

簡単な解決策は、ファイルをUNIX形式に変換することです。

dos2unix /path/to/php_configuration_file.ini

または、単純なコマンドがない場合は、dos2unix次のsed選択肢を使用できます。

sed -i 's/\r//' /path/to/php_configuration_file.ini

UNIXとLinuxの他の場所に重複した答えがあると確信していますが、見つかりません。これまでに私が得た最も近いのは、より詳細な情報を提供する関連項目です。

関連情報