shell参数扩展

shell parameter expansion

  1. 设置默认变量值(变量未赋值/为空时)

    1
    2
    3
    ${var:-default}
    ${var:=default}
    ${var=default}
  2. 如果变量未定义,给出message

    1
    ${var?message}
  3. 按照index进行截取

    1
    2
    3
    4
    5
    6
    ${var:index:length}

    eg:
    a="beautiful world"
    echo ${a:2} #autiful world
    echo ${a:2:4} #auti
  4. 按照匹配字符截取

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ${var#*pattern} #-->非贪婪
    ${var##*pattern} #-->贪婪
    ${var%pattern*} #<--非贪婪
    ${var%%pattern*} #<--贪婪

    eg:
    a="beautiful world"
    echo ${a#*l} #world
    echo ${a##*l} #d
    echo ${a%l*} #beautiful wor
    echo ${a%%l*} #beautifu
  5. 变量长度

    1
    ${#var}
  6. 打印所有以pre开头的变量

    1
    ${!pre*}
  7. 替换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ${var/search/replace} #替换第一个
    ${var//search/replace} #替换全部
    ${var/#search/replace} #只替换开头匹配到的
    ${var/%search/replace} #只替换结尾匹配到的

    eg:
    a="beautiful world"
    echo ${a/l/AA} #beautifuAA world
    echo ${a//l/AA} #beautifuAA worAAd
    echo ${a/#be/AA} #AAautiful world
    echo ${a/%ld/AA} #beautiful world