自 bash 早期版本以来,“==”和“-eq”的行为是否发生了改变:?

自 bash 早期版本以来,“==”和“-eq”的行为是否发生了改变:?

这里有一个脚本 设置英特尔 CPU 频率

我过去曾用它来降低过热的 INTEL CPU 的频率。通常只需降低一步就足够了,并使其不会“升压”。我已经好几年没有这样做了,但最近我组装的一个廉价采矿系统出现了问题,当我运行该脚本时,它失败了,我不得不用“-eq”替换“==”该脚本来自英特尔开发部门,我确信它在 Ubuntu 14 或 12 上运行正常。忘记我当时用的是哪个了。当我运行下面的代码时,我得到了 METHOD 为 0 的分支,它工作正常,但我不得不输入 -eq 而不是 ==

METHOD=0
..
        if [ $METHOD -eq 0 ]; then
--
userspace
Setting /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor to  userspace
Setting freq /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed to  2800000

答案1

如果您使用单数,则[您正在使用test而不是需要双数的 bash 逻辑运算符[[

在 和bashshdashUbuntu 中)中, [/test都被优化为 shell 内置命令,但是它们的行为并不相同,在 bash 中==是严格等同的,=但在 dash 中并非如此。

并且您指向的脚本的 shebang#! /bin/sh取决于平台,它将是 bash 或 dash。

相关内容