1. [ 居然是一个 Shell 命令, 位置在 /bin/[, 大概可以算冷知识了?

  2. [][[]] 中判断的时候使用 === 是等价的(不考虑特例, 就这么记好了).

  3. [] 可以用于判断, 左右需要加空格. 可以有多个判断条件, 判断条件必须是 -o, -a, 取反可以使用 !.

    # this will echo true
    if [ "string" -o "" ]; then
        echo true
    else
        echo false
    fi
    
    # this will echo false
    if [ "string" -a "" ]; then
        echo true
    else
        echo false
    fi
    
    # this depends on file existence
    if [ -e filename ]; then
        echo exists
    else
        echo not exists
    fi
    
    # this will echo true
    if [ ! "" ]; then
        echo true
    else
        echo false
    fi
    
  4. [[]] 也可用于判断, 左右需加空格, 可以有多个判断条件, 判断条件可以是 ||, &&, 取反可以使用 !.

    # this will echo true
    if [[ "string" || "" ]]; then
        echo true
    else
        echo false
    fi
    
    # this will echo false
    if [[ "string" && "" ]]; then
        echo true
    else
        echo false
    fi
    
    # this depends on file existence
    if [[ -e filename ]]; then
        echo exists
    else
        echo not exists
    fi
    
    # this will echo true
    if [[ ! "" ]]; then
        echo true
    else
        echo false
    fi
    
  5. {} 用于执行脚本命令, 在当前窗口执行, 会影响当前脚本, 左右必须留空, 语句结尾必须加分号 ;.

    var=0
    { var=1; }
    echo $var # $var is 1 now
    
  6. () 用于执行脚本命令, 新起窗口执行, 不影响当前脚本. 左右不必留空, 语句结尾不必加分号 ;.

    var=0
    (var=1)
    echo $var # $var is still 0
    
  7. (()) 用于进行四则运算, 基本可以替换 let "expression"语法, 左右可以不留空格.

    var=0
    ((var=1))
    echo $var # $var is 1 now
    
  8. 通常情况下, 无论 (), (()), 前面加 $ 符号意味着要取得其返回值, 而不加 $ 符号意味着只是让其简单做一个运算, 如同执行了一个 C 语言中的 void 类型函数, 无返回值.

    echo $(date) # echo the output of date command
    echo $((1))  # echo 1
    
    echo (date)  # this will lead error
    echo (1)     # this will lead error
    
  9. for 循环的一些用法, 注意第二种 {} 左右并未留空格, 我也很奇怪为啥:

    # C style
    for ((i = 1; i <= 10; i++)); do
        echo $i
    done
    
    # Perl/Python style
    for i in {1..10}; do
        echo $i
    done
    
Comments
Write a Comment