标签:
Shell 处理字符串和{}操作
获取字符串长度的方法大概有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
#
操作符 -- 从最左边开始到第一次出现子字符串的地方,全部删除
$echo $string
hello world
$echo ${string#*l}
lo world
$echo ${string#*ll}
o world
$echo ${string#*llo}
world
$echo ${string#llo}
hello world
注意: 这里需要用*来匹配,否则就像最后一个一样无效,另外倒数第二中把开头的空格去掉了,这个应该是shell的一种默认赋值,会将变量开头的空格去掉。例如:
$str1=" hello"
$echo $str1
hello
##
是从最左边开始匹配到最后出现子字符串的地方
$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 $string
hello world
$echo ${string:0:2}
he
$echo ${string:0-2:2}
ld
$echo ${string:2}
llo world
${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 $string
hello 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=hello
c_var2=world
${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
标签:
原文地址:http://www.cnblogs.com/zk47/p/4209511.html