当前位置: 首页 > article >正文

Ununtu环境下的判断字符串相等出现sh: xxx: [: xxx: unexpected operator的问题

文章目录

  • 前言
  • 现场还原
  • 总结

前言

这是个小问题,本质原因是判断字符相等使用两个 == 需要在 bash 环境下,而Ubuntu默认不是这个Shell环境,所以就会出现在 CentOS 上运行的好好的Shell,放到Ubuntu上就运行出错的问题,我遇到的问题本质也是这个原因,不过在复杂的状况下却不能一眼找到是哪里导致的。

现场还原

为了找出这个问题的原因,我把无关逻辑都去掉了,出现了下面a.shb.sh 两个脚本:

#!/bin/bash

VAL=$1

sh ./b.sh $VAL
#!/bin/bash

VAL=$1

if [ $VAL == "1" ] ; then
    echo "find it"
fi

echo "end"

考虑到兼容问题,我还在开头写了 #!/bin/bash,让它默认的用bash来执行,这样我无论在 Ununtu 还是其他的 Linux 版本都应该没问题了,可事实却不是这样,运行结果如下:

root@demo:~# ./a.sh fly
./b.sh: 5: [: fly: unexpected operator
end

如果眼尖的话一眼就看出来了,问题出在 sh ./b.sh $VAL 这一句,导致 #!/bin/bash 没有起到作用,使用 sh 这个shell 来执行的 b.sh 脚本,所以用 == 判断字符串相等会报错。

这个例子里很好发现,但是放在实际工作中的复杂脚本中就比较难发现了,再看报错 ./b.sh: 5 没有发现任何问题,因为查到可能是 Ubuntu 系统下的shell 语法导致的,我还尝试了多次改成单等号的写法,其他比较字符串的方式,依旧报错,但是当我发现问题的所在之后,无论单个等号还是两个等号我都能让他正确执行,这就是忙中出乱,静下来就好了

总结

  • 使用 == 判断字符串相等是 bash 中的语法
  • Shell 脚本开头的 #!/bin/bash 表示执行脚本时若没有指定Shell类型,则用说明的这种Shell执行
  • 遇到问题时需要静下心来慢慢解决,切忌忙中出乱
==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

有的人活下来就已经花光了所有力气,还要靠什么去抗争命运~


http://www.kler.cn/a/1018.html

相关文章:

  • 阿里云直播互动Web
  • 语音技术与人工智能:智能语音交互的多场景应用探索
  • React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)
  • Clojure语言的正则表达式
  • 二、BIO、NIO编程与直接内存、零拷贝
  • C语言---函数和数组实践:扫雷游戏
  • QT Plugin 插件开发
  • 跨境老兵多年经验整理出的WhatsApp养号攻略分享
  • 漫画:什么是归并排序算法?
  • Adam优化器算法详解及代码实现
  • ubuntu不同版本的源(换源)(镜像源)(lsb_release -c命令,显示当前系统的发行版代号(Codename))
  • 【Android笔记85】Android之使用Camera和MediaRecorder录制视频
  • Java的jar包打包成exe应用
  • K8S集群之-ETCD集群监控
  • 有图解有案例,我终于把 Condition 的原理讲透彻了
  • 几个cve漏洞库查询网站-什么是CVE?常见漏洞和暴露列表概述
  • Android 自定义view优化方案
  • spring事务 只读此文
  • Go panic的学习
  • 初识C++需要了解的一些东西(2)
  • 从GPT到GPT-3:自然语言处理领域的prompt方法
  • 开源超级终端工具——WindTerm
  • Qt·Linux下Qt、Qml程序的打包
  • Linux(传输层二继续讲TCP)
  • 关于进制转换
  • 【C++】Google编码风格学习