# shell 常用语法

# redirect

# pipeline

# process substitution

# Test, [ and [[

# Test , [ 特性

# [[ 特性

[[ 是 bash 内建命令 [ 的提升, 它具有多项增强功能,如果你编写的是以 bash 为目标的脚本,它是更好的选择。

  • 不再需要疯狂地引用变量,即它会阻止 bash 的字符分隔行为([ 不会,所以,其扩起来的变量必须加引号)举例:
# [ 是个命令,而 ] 仅仅是一个参数,用来表示结尾
if [ -f "$file" ]
# [[
if [[ -f $file ]]  
1
2
3
4
  • 支持使用 !, && 和 || 用于布尔测试 和 使用 > 和 < 用于字符串比较。通常情况下,< 是 重定向,&& and || 用来连接多个命令,( ) 用来生成子 shell。而 [ 是一个常规命令, && , ||, <, > 这些符号不会作为命令行参数传递给常规命令。 [[ 使得上述字符被特殊处理。
# 详细参考 http://mywiki.wooledge.org/BashFAQ/031
[[ a > b ]] || echo "a does not come after b"
[[ az < za ]] && echo "az comes before za"
[[ a = a ]] && echo "a equals a"
1
2
3
4
  • 使用 =~ 操作符做正则匹配。举例:
# [...]
if [ "$answer" = y -o "$answer" = yes ]
# [[...]]
if [[ $answer =~ ^y(es)?$ ]]
1
2
3
4

# == vs =

  • = 是 POSIX 标准,== 是 bash 扩展, 在 [[[ 中二者用法相同,个人推荐使用 =

# 特殊变量

上次更新: 5/12/2020, 2:19:47 AM