Shell 括号

这篇包含中括号[]及尖括号<,大括号 {} 请看 Shell-03-字符

[TOC]

中括号

[][[]] 区别

  1. 当使用 -n 或者 -z 判断变量是否为空时,[] 需要在变量的外侧加上双引号,[[]] 则不用。

    [ -n "${a}" ]
    [[ -n ${a} ]]

    原因可参考:Linux shell if [ -n ] 正确使用方法

  2. 使用 [[]] 时,不能使用 -a 或者 -o 对多个条件进行连接。

  3. 使用[] 时,使用-a或者-o对多个条件进行连接,-a或者-o必须被包含在[]之内。

  4. 使用[]时,如果使用&&或者||对多个条件进行连接,&&或者||必须在[]之外。

    [[ $a -ge 3 && $b -ge 4 ]]
    [ $a -ge 3 -a $b -ge 4 ]
    [$a -ge 3] && [$b -ge 4]
  5. 使用符号=~匹配正则表达式时,只能使用[[]]

  6. 使用>或者<判断字符串的 ASCII 值大小时,如果结合[]使用,则必须对>或者<进行转义。

    [[ $a =~ [0-9]{11} ]]

    panduan

  7. [[]]更适合逻辑运算,(())更适合数值运算。

尖括号

<

将文件的内容作为标准输入

cat FILENAMEcat < FILENAME 区别

cat FILENAME:打开一个文件,并标准输出。

cat < FILENAME:Shell 打开文件,并作为 cat 的标准输入。

文件权限不同,可能造成不同的结果。

<<

here document

EOF'EOF' 区别

如果没有引号,文档中的任何变量,转义等都将正常显示。

<<<

here string

<<< 之后的字符串传递给命令,作为命令的标准输入。

<()

传递需要打开和读取的文件的名称。

< <()

<()产生的文件输入重定向到命令中。

管道和输入重定向将内容推送到 STDIN 流。进程替换运行命令,将其输出保存到特殊的临时文件,然后传递该文件名代替命令。无论您使用什么命令,都将其视为文件名。请注意,创建的文件不是常规文件,而是在不再需要时自动删除的命名管道

Last updated

Was this helpful?