在截取shell变量中的子串中,有很多办法,下面简单介绍一种。利用变量自身以及特殊的符号即可实现
file=/dir1/dir2/dir3/my.file.txt
要求截取一下字符串
file.txt
txt
/dri1/dir2/dir3
null
dir1/dir2/dir3/my.file.txt
/dir1/dir2/dir3/my.file
/dir1/dir2/dir3/my
my.file.txt
处理方法:
echo ${file#*.} 去掉第一点以及左边的内容
echo ${file##*.} 去掉最后一个点以及左边的内容
echo ${file%/*} 去掉最后一个/以及右边的内容
echo ${file%%/*} 去掉第一个/以及右边的内容
echo ${file#*/} 去掉第一个/以及左边的内容
echo ${file%.*} 去掉最后一个点以及右边的内容
echo ${file%%.*} 去掉第一个点以及右边的内容
echo ${file##*/} 去掉最后一个/以及左边的内容
解析:如果最前面出现的是#好那么就是代表去掉左边的内容,一个#号代表的是去掉第一个出现的某个字符的左边的内容,两个#代表的是去掉最后一个出现字符的左边的内容,%正好相反,代表的是去掉右边,而且%代表的是去掉最后一个出现的,%%代表的是第一个出现的。选取的字符出现的位置也有差别,#是后面加上*号,然后添加你定位的符号,然而%是先定位符号再加上*号。
file=/dir1/dir2/dir3/my.file.txt
要求截取一下字符串
file.txt
txt
/dri1/dir2/dir3
null
dir1/dir2/dir3/my.file.txt
/dir1/dir2/dir3/my.file
/dir1/dir2/dir3/my
my.file.txt
处理方法:
echo ${file#*.} 去掉第一点以及左边的内容
echo ${file##*.} 去掉最后一个点以及左边的内容
echo ${file%/*} 去掉最后一个/以及右边的内容
echo ${file%%/*} 去掉第一个/以及右边的内容
echo ${file#*/} 去掉第一个/以及左边的内容
echo ${file%.*} 去掉最后一个点以及右边的内容
echo ${file%%.*} 去掉第一个点以及右边的内容
echo ${file##*/} 去掉最后一个/以及左边的内容
解析:如果最前面出现的是#好那么就是代表去掉左边的内容,一个#号代表的是去掉第一个出现的某个字符的左边的内容,两个#代表的是去掉最后一个出现字符的左边的内容,%正好相反,代表的是去掉右边,而且%代表的是去掉最后一个出现的,%%代表的是第一个出现的。选取的字符出现的位置也有差别,#是后面加上*号,然后添加你定位的符号,然而%是先定位符号再加上*号。