Linux ${}表达式详解

参数替换

  1. 等价替换
    ${var_name} 等价于 $var_name

  2. var:-default 和 var-default
    $(var:-default)当var为空或未定义时整个表达式的值为default $(var-default)当且仅当var未定义时整个表达式的值为default

  3. 【Linux ${}表达式详解】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}/表示只替换一次 //表示全部替换

    推荐阅读