[和[[在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操作组合时,事情才会变得有趣。
冉冉说
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 ...
添加回答
举报
0/150
提交
取消