首页 > 代码库 > Shell 处理字符串和{}操作

Shell 处理字符串和{}操作

 

Shell 处理字符串和{}操作

1. 获取变量的长度

获取字符串长度的方法大概有4种:(以hello world 为例)

  • 通过 wc -L

     $ echo "hello world" | wc -L    11
  • 通过expr length string

    $ expr length "hello world"11
  • 通过awk内置的length函数

    $ echo "hello world" | awk ‘{print length($0)}‘11
  • 通过echo ${#string_name}

    $ string=‘hello world‘$ echo ${#string}11

2. 截取变量 by {}操作

  • # 操作符 -- 从最左边开始到第一次出现子字符串的地方,全部删除

    $echo $stringhello world$echo ${string#*l}lo world$echo ${string#*ll}o world$echo ${string#*llo}world$echo ${string#llo}hello world

注意: 这里需要用*来匹配,否则就像最后一个一样无效,另外倒数第二中把开头的空格去掉了,这个应该是shell的一种默认赋值,会将变量开头的空格去掉。例如:

$str1=" hello"$echo $str1hello
  • ##是从最左边开始匹配到最后出现子字符串的地方

    $echo ${string##*l}d
  • %是从最右边开始匹配到第一个出现子字符串的地方,*号放在匹配子字符串的右边

    $echo ${string%l*}hello wor
  • %%是从最右边开始匹配到最后出现子字符串的地方

    $echo ${string%%l*}he
  • ${string:m:n} 操作

注意:

左边第一个下标用 0 表示
右边第一个下表用 0-1 表示,右边第二个用 0-2 表示, 依次类推n 表示字符的个数,不是下标
${string:3} 这里的3表示从左边第4个开始

$echo $stringhello world$echo ${string:0:2}he$echo ${string:0-2:2}ld$echo ${string:2}llo world

3. 参数替换和扩展 -- by {} 操作

  • ${str-value} 如果str没有被申明,则赋值value

  • ${str:-value} 如果str没有被申明或者值为空,则赋值value

    $var=$echo ${var-helo}   -- 此时变量var为空$echo ${var:-helo}helo
  • ${str+value} 如果不管str为何值,均使用value作为默认值

  • ${str:+value} 除非str为空,否则均使用value作为默认值

  • ${str=value} 如果str没有被申明,则使用value作为默认值,同时将str赋值为value

  • ${str:=value} 如果str没有被申明,或者为空,则使用value作为默认值,同时将str赋值为value

  • ${str?value} 如果str没有被申明,输出value到STDERR

  • ${str:?value} 如果str没有被申明,或者为空,输出value到STDERR

  • ${!var} 间接变量引用

    $echo $stringhello world$str="string"$echo ${!str}hello world
  • ${!prefix*} 匹配之前所有以prefix开头申明的变量

  • ${!prefix@} 匹配之前所有以prefix开头申明的变量

    $cat test.sh c_var1="hello"c_var2="world"for c in ${!c_*}; do    echo "${c}=${!c}"done$sh test.sh c_var1=helloc_var2=world

4. 字符串替换 -- by {}操作

  • ${string/str1/str2},用str2替换从左边数第一个str1

  • ${string//str1/str2},用str2替换全部str1

  • ${string/#str1/str2},如果string的前缀是str1,则将其替换为str2

  • ${string/%str1/str2},如果string的后缀是str1,则将其替换为str2

    $echo ${string/l/s}heslo world$echo ${string//l/s}hesso worsd$echo ${string/#he/h}hllo world$echo ${string/%ld/d}hello word

 

<style></style>

Shell 处理字符串和{}操作