为了账号安全,请及时绑定邮箱和手机立即绑定

[和[[在Bash?之间]有什么区别?

[和[[在Bash?之间]有什么区别?

HUX布斯 2019-07-31 14:13:47
[和[[在Bash?之间]有什么区别?我查看了bash手册页,并[[说它使用条件表达式。然后我查看了Conditional Expressions部分,它列出了与test(和[)相同的运算符。所以我想知道,Bash [和[[Bash 之间的区别是什么?
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

  • [test内置相同,并且像test二进制(man test)一样工作

    • [许多类UNIX环境中的所有其他基于sh的shell一样

    • 仅支持单一条件。使用bash &&||运算符进行的多次测试必须在单独的括号中。

    • 本身不支持'not'运算符。要反转条件,请使用!第一个括号外部来使用shell的工具来反转命令返回值。

    • ==并且!=是文字字符串比较

  • [[ 是一个bash

    • 是特定于bash的,尽管其他shell可能已经实现了类似的构造。不要指望它在老式的UNIX sh中。

    • ==!=应用bash模式匹配规则,请参阅“模式匹配”man bash

    • 有一个=~正则表达式匹配运算符

    • 允许使用括号和括号内的!&&||逻辑运算符来组合子表达式

除此之外,它们非常相似 - 大多数单独的测试在它们之间的工作方式相同,当您需要将不同的测试与逻辑AND / OR / NOT操作组合时,事情才会变得有趣。


查看完整回答
反对 回复 2019-07-31
?
冉冉说

TA贡献1877条经验 获得超1个赞

最重要的区别在于代码的清晰度。是的,是的,上面说的是真的,但是[[]]使你的代码符合你在高级语言中所期望的,特别是关于AND(&&),OR(||)和NOT()运营商。因此,当您在系统和语言之间移动时,您将能够更快地解释脚本,从而使您的生活更轻松。从一个好的UNIX / Linux参考中获取细节。您可能会发现某些细节在某些情况下有用,但您将始终欣赏清晰的代码!您更喜欢阅读哪个脚本片段?即使脱离背景,第一选择也更容易阅读和理解。


if [[ -d $newDir && -n $(echo $newDir | grep "^${webRootParent}") && -n $(echo $newDir | grep '/$') ]]; then ...

要么

if [ -d "$newDir" -a -n "$(echo "$newDir" | grep "^${webRootParent}")" -a -n "$(echo "$newDir" | grep '/$')" ]; then ...



查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 482 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信