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

What's the difference between [ and [[ in Bash?

本问题已经有最佳答案,请猛点这里访问。

我看了bash手册页,[[说它使用条件表达式。然后我查看了条件表达式部分,它列出了与test[相同的运算符。

所以我想知道,在bash中,[[[有什么区别?


[[是改进的[bash的命令。它有几个增强功能,使它更好的选择,如果你写的是bash脚本的目标。是我的最爱

  • 它的特征是syntactical的壳,它有一些特殊的操作系统是不是有[行为。你不再要我疯了,因为[[句柄类变量与字符串和字符串空intuitively Whitespace更多。例如,你有一个与[

    1
    if [ -f"$file" ]

    对正确处理空字符串或文件名和在他们的空间。在与[[报价是不必要的:

    1
    if [[ -f $file ]]
  • 因为它是一个syntactical特征,它让你&&布尔算子和||是使用试验和<>是字符串比较。这是因为它的[不能调节命令和&&||<,是通过定期和不>命令的命令行参数。

  • 它有美好的=~算子在正则表达式匹配。你会写下[

    1
    if ["$answer" = y -o"$answer" = yes ]

    你可以用这个[[

    1
    if [[ $answer =~ ^y(es)?$ ]]

    它甚至让你访问的捕获组,它BASH_REMATCH门市店。例如,${BASH_REMATCH[1]}将是"S"型,"如果你的全是"上面"。

  • 你得到免费的通配符模式匹配)。也许你不了解是如何严格的类型。也许你是好的,如果用户类型的Y -什么。有你覆盖。

    1
    if [[ $ANSWER = y* ]]
  • 这是保持头脑的bash扩展,所以如果你的写作是HS -兼容的脚本你需要与[棒。请确保你有你的工作线是#!/bin/bash双脚本如果你使用的东西。

    国有企业也

    • bash常见问题解答"什么是测试之间的差异,和[ [ [???????"
    • bash Bash测试规范
    • 什么是服务器的故障之间的差异,在双和单Bash的东西吗?


    • test[是内置的,和喜欢的人test二厂试验)
      • 关于该作品的所有其他[SH型壳在许多UNIX环境
      • 只支持单一的条件。试验用多&&||bash和运营商必须在单独的东西。
      • 是不是"不"natively支持运营商。反演使用条件,在使用的第一架!壳装置的反相命令的返回值。
      • ==!=是字面字符串比较
    • [[是重击
      • bash的特异性是可以实现的,但其他人有类似的壳结构。不希望它在一个老式的UNIX下SH。
      • ==!=bash和模式匹配规则适用于国有企业"模式匹配",在man bash
      • =~正则表达式匹配算子
      • 允许使用的parentheses和!&&||逻辑算子,例如将在子表达式

    除了这个,他们再漂亮的最相似的个体他们之间identically试验工作,比如当你需要得到的东西,只有将不同的试验和/或/和逻辑NOT操作。


    在派对上,[相反,防止分裂[[Word)变量的值。


    最重要的,你将清晰的差分编码。是的,是的,你说的是真的,上面的* [ ],但带来了你的代码,你会希望在网络中与高层次的语言,特别是关于对与(&;&;),或(| |)和NOT(!)运营商。因此,当你在移动系统和语言,你将能够解释脚本。这使你的生活更容易。把这个事实真相,从Unix / Linux的很好的参考。你可以找到一些有用的事实真相是在某些情况下,但你将永远appreciate清晰的代码!这不是你读剧本的片段?该文从上下文,第一选择是更容易阅读和理解。

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

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