我有这个小 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!
这怎么可能?
它说变量的值IS
extension=imagick.so
,但它仍然进入 if 子句,只有在它不存在的情况下才应该去
extension=imagick.so
提前致谢!
这里的问题是您有一个在 Windows 上创建的 PHP 配置文件。因此,它的行结尾是 CR/LF,而不是 LF 的 UNIX 标准。
您可以通过
echo
像这样修改命令来证明这一点正如评论中所确认的,您会看到输出的最后一个空格和
>
行首,表明值中确实有一个嵌入的换行符:简单的解决方案是将文件转换为 UNIX 格式:
或者,如果您没有简单的
dos2unix
命令,则可以使用以下sed
替代方法:我确信在 UNIX&Linux 的其他地方有重复的答案,但我找不到它们。到目前为止,我得到的最接近的是这个相关的,它提供了更多细节