首页 > 科技 > 妙用字符串的替换和截取让Shell脚本精准得到你心中的那个“她”

妙用字符串的替换和截取让Shell脚本精准得到你心中的那个“她”


目的

shell脚本中各种条件的判断,都需要对判定条件精准把控,而字符串在脚本中用的是最多的,怎样准确的获取你想要的字符串至关重要。本文详细介绍了shell脚本中妙用字符串的替换和截取,让你精准获得你心中的那个她。



截断

例子:file=/dir1/dir2/dir3/my.file.txt

#拿掉第一条/及其左边的字符串${file#*/}结果:dir1/dir2/dir3/my.file.txt #拿掉最后一条/及其左边的字符串${file##*/}结果:my.file.txt #拿掉第一个.及其左边的字符串${file#*.}结果:file.txt  #拿掉最后一个.及其左边的字符串${file##*.}结果:txt#拿掉最后条/及其右边的字符串${file%/*}结果:/dir1/dir2/dir3#拿掉第一条/及其右边的字符串${file%%/*}结果:(空值)#拿掉最后一个.及其右边的字符串${file%.*}结果:/dir1/dir2/dir3/my.file#拿掉第一个.及其右边的字符串${file%%.*}结果:/dir1/dir2/dir3/my

记忆方法很简单:

#表示去掉左边, ##去掉最后一个

%表示去掉右边, %%去掉第一个


提取

单一符号是最小匹配,两个符号是最大匹配。

#提取最左边的 5 个字节${file:0:5/dir1${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2

替换

#将第一个 dir 提换为 path${file/dir/path}结果:/path1/dir2/dir3/my.file.txt#将全部 dir 提换为 path${file//dir/path}结果:/path1/path2/path3/my.file.txt


针对不同的变量状态赋值(没设定、空值、非空值):

#若$file没有设定,则使用my.file.txt作返回值。(空值及非空值时不作处理)${file-my.file.txt}#若$file没有设定或为空值,则使用my.file.txt作返回值。(非空值时不作处理)${file:-my.file.txt}#若$file设为空值或非空值,均使用my.file.txt作返回值。(没设定时不作处理)${file+my.file.txt}#若$file为非空值,则使用my.file.txt作返回值。(没设定及空值时不作处理)${file:+my.file.txt}#若$file没设定,则使用my.file.txt作返回值,同时将$file 赋值为 my.file.txt。(空值及非空值时不作处理)${file=my.file.txt}#若$file没设定或为空值,则使用my.file.txt作返回值,同时将 $file 赋值为 my.file.txt。(非空值时不作处理)${file:=my.file.txt}#若$file没设定,则将my.file.txt输出至 STDERR。(空值及非空值时不作处理)${file?my.file.txt}#若$file没设定或为空值,则将my.file.txt输出至STDERR。(非空值时不作处理)${file:?my.file.txt}注意: ":+"的情况是不包含空值的.":-", ":="等只要有号就是包含空值(null).

变量的长度

${#file}

数组运算

A=(a b c def)${A[@]} 或 ${A[*]} #可得到 a b c def (全部组数)${A[0]} #可得到 a (第一个组数),${A[1]} 则为第二个组数...${#A[@]} 或 ${#A[*]} #可得到 4 (全部组数数量)${#A[0]} #可得到 1 (即第一个组数(a)的长度),${#A[3]} 可得到 3 (第四个组数(def)的长度)

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/262800.html