linux - bash 或 sh 中的 '=' 和 '==' 运算符之间有什么区别吗

标签 linux bash shell operators

我意识到“=”和“==”运算符都可以在 if 语句中使用。例如:

var="some string"
if [ "$var" == "some string" ];then
    #doing something
fi

if [ "$var" = "some string" ];then
    #doing something
fi

上面的两个 if 语句在 bash 和 sh 中都运行良好。我只是想知道它们之间有什么区别吗?谢谢...

最佳答案

在用于条件测试的单括号内(即 [ ... ]),所有 shell 都支持单个 =,而某些较旧的 shell 不支持 as ==。

在条件测试的双括号内(即 [[ ... ]]),新旧 shell 没有区别。

编辑:我还应该注意:尽可能使用双括号 [[ ... ]],因为它比单括号更安全。我将通过以下示例说明原因:

if [ $var == "hello" ]; then

如果 $var 恰好为 null/empty,那么这就是脚本看到的内容:

if [ == "hello" ]; then

这会破坏您的脚本。解决方案是要么使用双括号,要么始终记得在变量周围加上引号 ("$var")。双括号是更好的防御性编码实践。

关于linux - bash 或 sh 中的 '=' 和 '==' 运算符之间有什么区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12948456/

相关文章:

linux - 在shell脚本中处理多行变量

linux - 在 shell 脚本中通过 vi 编辑器编辑文件显示错误

php - Jenkins 用户无法运行 composer install

C# .NET Core Console.ReadKey(true) 不会(总是)拦截 Ubuntu 上的 key

file - 在包含 '>' 字符的行拆分文件

linux - 将 Java 输出存储到文件

linux - 带有 $ 的 BASH 脚本未正确保存

linux - 为 Windows 7 创建 Debian 镜像服务器

linux - 在 bash 脚本中防止系统 sleep /关机/重启

bash - 在 shell 脚本中使用 Perl 单行代码