当前位置: 首页 > 面试题库 >

bash双括号问题

宇文修筠
2023-03-14
问题内容

我是bash脚本的新手,使用双括号时遇到问题。我似乎无法让它们在Ubuntu Server 11.10中完全正常工作。我下面的脚本在if_test.sh中。

#!/bin/bash

if [[ "14"=="14" ]]; then 
    echo "FOO"
fi

当我运行此简单的shell脚本时,输出为:if_test.sh:5:[[:找不到

从终端运行bash –version后,似乎正在运行GNU bash 4.2.10。任何帮助将不胜感激。谢谢!


问题答案:

问题出在脚本调用上。您正在发出:

$ sudo sh if_test.sh

在Ubuntu系统上,/bin/sh
dash,不是bash,并且dash不支持双括号关键字(或者在发布本文时还没有,我还没有仔细检查)。您可以通过显式调用bash来解决您的问题:

$ sudo bash if_test.sh

另外,您可以使脚本可执行,并依靠shebang行:

$ chmod +x if_test.sh
$ sudo ./if_test.sh

另请注意,在双方括号之间使用时,==是模式匹配运算符,而不是等价运算符。如果要测试是否相等,可以使用-eq

if [[ "14" -eq "14" ]]; then 
    echo "FOO"
fi

或双括号:

if (( 14 == 14 )); then 
    echo "FOO"
fi


 类似资料:
  • 我正在阅读关于if的bash示例,但有些示例是用单方括号编写的: 其他带双方括号: 有什么区别?

  • 类似于let命令,((...))结构允许算术计算和求值. 它最简单的形式a=$(( 5 + 3 ))会把变量"a"的值设置成"5 + 3"或8. 但是,在Bash中双括号结构也是遵循C风格的变量操作的一种机制. 例子 9-30. C风格的变量操作 1 #!/bin/bash 2 # 用((...))结构来使用C风格操作符来处理变量. 3 4 5 echo 6

  • 问题内容: 我对以下代码行的语法感到困惑: 数据框对象由2列(“大脑”和“身体”)组成 当我打印x_values时,我得到这样的东西: 就dataframe对象的属性和方法而言,我知道pandas文档,但双括号语法使我感到困惑。 问题答案: 考虑一下: 来源DF: 选择一列-生成Pandas.Series: 选择DataFrame的子集-结果为DataFrame: 结论: 第二种方法允许我们从Da

  • 例3.3.2 括号匹配问题 输入一个由中、小括符组成的字符串。判断其匹配情况,若括号可以成功匹配,则输出yes,否则输出no。 输入格式: 测试数据有多组,处理到文件尾。对于每组测试,输入一个由中、小括符构成的字符串(长度不超过30)。 输出格式: 对于每组测试,若括号可以成功匹配,则输出“yes”,否则输出“no”。引号不必输出。 输入样例: ()[] [()] [(()]] [(]) 输出样例

  • 问题内容: 如何在Ansible 1.9.2中转义双花括号? 例如,如何在以下shell命令中转义大括号? 问题答案: 这是一个非常干净和Ansible的本机解决方法,不依赖于花括号。我们假设之前我们刚刚使用 Ansible docker模块 引用了一个容器: 现在,在Variable中具有Docker容器的IP 。我还在我的文章《与Docker融为一体的婚姻》中发布了此变通办法。 [更新2015

  • 问题内容: 在Java的“ 隐藏功能”中,最常见的答案是,其语法非常诱人: 此成语创建一个匿名内部类,其中仅包含一个实例初始化程序,该实例“可以使用包含范围内的任何方法”。 主要问题:这听起来像效率低下吗?它的使用是否应仅限于一次性初始化?(当然还有炫耀!) 第二个问题:新的HashSet必须是实例初始化程序中使用的“ this”……任何人都可以阐明该机制吗? 第三个问题:这个习惯用法是否太晦涩,