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
posted @ 2022-07-13 17:37  赤兔胭脂小吕布  阅读(37)  评论(0)    收藏  举报