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의 다른 곳에 중복된 답변이 있다고 확신하지만 찾을 수 없습니다. 지금까지 내가 얻은 가장 가까운 것은 더 자세한 내용을 제공하는 관련 항목입니다.

관련 정보