Linux ${}表達式詳解

參數替換

  1. 等價替換

    ${var_name} 等價於 $var_name
    
  2. var:-default 和 var-default

    $(var:-default)   當var爲空或未定義時整個表達式的值爲default
    $(var-default)    當且僅當var未定義時整個表達式的值爲default
    
  3. var:=default 和 var=default

    $(var:=default)   當var爲空或未定義時整個表達式的值爲default,並且將var的值設置爲default
    $(var=default)    當且僅當var未定義時整個表達式的值爲default,並且將var的值設置爲default
    
  4. var:?default 和 var?message

    $(var:?message)   當var爲空或未定義時,打印錯誤信息,信息內容爲message表示的值
    $(var?message)    當且僅當var未定義時,打印錯誤信息,信息內容爲message表示的值
    
  5. var:+default 和 var+default

    $(var:+default)   當var已定義且不爲空時整個表達式的值爲default
    $(var+default)   當var已定義時整個表達式的值爲default(不管var是否是空)
    

字符串截取

  1. ${str:offest} 從下標offset(含)開始截取到末尾的子串
  2. ${str:offest:length} 從下表offset(含)開始向後截取長度爲length的子串,長度超出不報錯
  3. ${str:offest:index} 此處的index爲負數,最後一個字符爲-1,依次往前爲-2,-3。此表達式截取offset(含)到index(不含)之間的子串,當index表示的位置在offset左邊時會報錯

變量匹配

${!prefix*}、${!prefix@} 將帶有前綴爲prefix的變量名打印出來

數組操作

1.${!name[@]}、${!name[*]} 將數組name的所有下標返回,如果變量name不是數組則返回0,不存在則空
2.${name[@]}、${name[*]}將數組name的所有元素返回,如果變量name不是數組則返回name的值,不存在則空
3.${name[index]} 將數組name的index處的元素返回,如果變量name不是數組且index爲0時返回name的值,變量或索引index處的元素不存在則返回空

正則匹配替換

1、${parameter#word}、${parameter##word}
  從頭開始掃描word,將匹配word正則表達的字符過濾掉
  #爲最短匹配,##爲最長匹配
2、${parameter%word}、${parameter%%word}
  從尾開始掃描word,將匹配word正則表達式的字符過濾掉
  %爲最短匹配,%%爲最長匹配
3、${parameter/pattern/string}、${parameter//pattern/string}

/表示只替換一次
//表示全部替換
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章