bash 或 sh 中的“=”和“==”运算符有什么区别

2024-05-06

我意识到“=”和“==”运算符都可以在 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 / 空,​​那么脚本会看到以下内容:

if [ == "hello" ]; then

这会破坏你的脚本。解决方案是使用双括号,或者始终记住在变量两边加上引号(“$var”)。双括号是更好的防御性编码实践。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash 或 sh 中的“=”和“==”运算符有什么区别 的相关文章

随机推荐

  • Mysql 选择 csv 字符串中的 where 字段

    我想从一个表中进行选择 其中的字段位于传递给存储过程的给定 csv 字符串中 最快的方法是什么 我应该将这些值插入临时表并加入其中吗 或者有没有办法用一个语句来做到这一点 Thanks 做了一些搜索并找到了一个很好的答案 使用MySql的字
  • 在 django 模板中显示字典键

    我想知道如何在 django 模板中显示字典键本身 字典示例 resources coin coin grain grain iron iron stone stone wood wood 模板 b Coin b upgrade coin
  • 自动 npm install --legacy-peer-deps 用于单个依赖项

    假设我有一个package json像这样 name my app version 0 1 0 dependencies aws sdk client s3 3 21 0 testing library react 11 2 5 axios
  • Swift UITextFieldShouldReturn 返回键点击

    iOS8 Xcode6 斯威夫特 使用 Swift 如何捕获 返回 按钮上的点击 以下链接中的文档指定使用textFieldShouldReturn方法 Swift optional func textFieldShouldReturn t
  • 如何在浏览模式下禁用 RStudio 中的查看模式

    Is there a way to disable the View mode in RStudio when debugging functions 代码示例 myfun lt function browser myfun 我知道它不开放
  • 将 NSDate 从一个时区更改为另一个时区 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Clion 中更改 CMake 语法颜色

    我安装了 CLion 并自定义配置了深色主题 以便长时间盯着屏幕时眼睛更舒服 我能够更改 C 语法配置的每种颜色 但 CMake 的颜色选项不存在 并且 CMake 的默认颜色是非常深的橄榄色 需要我睁大眼睛才能阅读 CMake 以代码样式
  • 使用 Java 11 在 Eclipse 中混合模块化和非模块化开发

    自从我从事 Java 编程以来已经有一段时间了 在项目拼图之后 我很惊讶地回到了 Java 编程 整个环境对我来说都是陌生的 我在混合模块化和非模块化环境中使用 Eclipse 2018 09 4 9 0 标准 Java 项目时遇到问题 具
  • 如何在PostgreSQL事务中使用变量

    如何在 Postgresql 事务内部将值获取到变量中 如果 SELECT 没有返回任何内容 则抛出错误 如果 SELECT 返回数据 则在事务中使用它们 像这样 BEGIN activeRounds SELECT FROM rounds
  • 如何用 Pandas DataFrame 中的行总和替换 NaN

    我试图用 Pandas DataFrame 中的行总和替换某些列中的 NaN 请参阅下面的示例数据 Items Estimate1 Estimate2 Estimate3 Item1 NaN NaN 8 Item2 NaN NaN 5 5
  • 使用绘图数学保留尾随零

    我在用着annotate 将文本覆盖在我的其中一个上ggplot2地块 我正在使用该选项parse T因为我需要使用希腊字母 rho 我想要文字说 0 50 但是尾随零被剪掉 我得到 0 5反而 这是一个例子 library ggplot2
  • 在 Visual Studio 中查找所有与 == 进行比较的情况

    我犯了一个错误 使用 来比较 IP 地址 而不是使用 C 中 IPAddress 类的 equals 方法 这将导致比较的是引用而不是值 由于我目前正在研究的解决方案对于一个人项目来说非常大 gt 100 000 行源代码 因此我非常确定我
  • DbConnection 不带 Db,使用内存中的 DataSet(或类似的)作为源

    我正在尝试对一些 NET 类进行单元测试 这些类 出于良好的设计原因 需要 DbConnections 来完成其工作 对于这些测试 我在内存中有某些数据可以作为这些类的输入 内存中的数据可以很容易地表示为 DataTable 或包含该 Da
  • sed 在文本文件中换行?

    我是 Sed 的新手 我有一堆 ASCII 文件 其中包含如下所示的数据 Test Version 2 6 3 Model Manufacturer HR21 100 Test Version 2 6 3 Model Manufacture
  • 如何使用保存实例状态来保存活动状态?

    我一直在研究Android SDK平台 并且不太清楚如何保存应用程序的状态 因此 考虑到对 Hello Android 示例的这个小改动 package com android hello import android app Activi
  • cygwin winsymlinks:本机不起作用

    我现在和 cygwin 斗争了很长一段时间 我广泛搜索了如何让 cygwin 创建 Windows 风格的符号链接 我尝试了以下方法 export CYGWIN winsymlinks native export CYGWIN winsym
  • 如何通过列表中的属性值获取/查找对象

    我有一个关于通过使用 LINQ 搜索 字段名称来获取列表对象的问题 我编码简单Library and Book为此类 class Book public string title get private set public string
  • 如何验证字符串仅包含字母、数字、下划线和破折号? [复制]

    这个问题在这里已经有答案了 如果我迭代字符串中的所有字符 我知道如何做到这一点 但我正在寻找一种更优雅的方法 正则表达式只需很少的代码即可实现这一目的 import re if re match A Za z0 9 my little st
  • 将列拆分为多列

    对于下面给出的数据 data1 lt structure list var1 c 2 7 2 6 7 2 7 2 7 1 7 1 7 1 5 1 2 7 1 5 1 7 1 2 3 4 5 6 7 1 2 4 6 Names var1 cl
  • bash 或 sh 中的“=”和“==”运算符有什么区别

    我意识到 和 运算符都可以在 if 语句中使用 例如 var some string if var some string then doing something fi if var some string then doing some