Shell编程中会经常遇到字符串处理(如截取)
Shell编程中会经常遇到字符串处理(如截取)
今天在写shell脚本的时候看到前辈的代码中有
.....
get_col(){
local s=$1
local col_num=$2
local col_str=$3
let "col_num--"
local ss=${s#*${col_str}}
if [[ ${col_num} -eq 0 ]]
then
echo ${ss%%${col_str}*}
else
local sss=${ss#*${col_str}}
get_col "$sss" $col_num "$col_str"
fi
}
.....
对于类似${ss%%${col_str}*}
这样的不是很懂,今天特地抽时间学了一下
提示:varible表示shell中的目标变量,
str代表要匹配的字符串。
${varible##*str} 表示 从左向右 截取 最后一个等于str 后 的字符串
${varible#*str} 表示 从左向右 截取 第一个 等于str 后的 字符串
${varible%%str*} 表示 从右向左 截取 最后一个str 后的 字符串
${varible%str*} 表示 从右向左 截取 第一个str 后的 字符串
eg:
$ var=testfortest.raw
$ echo ${var##*test}
.raw
$ echo ${var#*test}
fortest.raw
$ echo ${var%%test*}
//空,从右向左,最后一个test后面为空
$ echo ${var%test*}
testfor