shell 表达式截取字符串
-
汇总
# 解析 $ 从左到右,从指定的下标开始截取指定长度字符 $ 从左到右,截取从指定下标到字符串最后的所有字符 $ 从右到左, 从指定的右侧下标开始, 往右截取指定长度字符 $ 从右到左, 截取从指定下标到右侧最后的字符 $ 从左到右, 从字符串第一次出现标识开始, 截取标识右边所有的字符 $ 从左到右, 从字符串最后一次出现标识开始, 截取标识右边所有的字符 $ 从右到左, 从字符串第一次出现标识开始, 截取标识左边所有的字符 $ 从右到左, 从字符串最后一次出现标识开始, 截取标识左边所有的字符 -
注意
- 从左边开始计数时,起始下标是 0;从右边开始计数时,起始下标是 1
- 不管从哪边开始计数,截取方向都是从左到右
-
${字符串: 指定下标:截取长度}, ${字符串: 指定下标}:
path='/root/test/abc.txt' sub1=${path: 0:5} #从第一个字符(下标0)开始,截取5个字符 sub2=${path: 6:4} #从第七个字符(下标6), 截取4个字符 sub3=${path: 6} echo $sub1 echo $sub2 echo $sub3
结果
/root test test/abc.txt
-
${字符串: 0-右起指定下标:截取长度}, $
path='/root/test/abc.txt' r_sub1=${path: 0-3: 3} r_sub2=${path: 0-7: 3} r_sub3=${path: 0-12} echo $r_sub1 echo $r_sub2 echo $r_sub3
结果
txt abc test/abc.txt
-
${字符串#标识}, ${字符串##标识}, ${字符串%标识}, ${字符串%%标识}
path='C:/root/test/abc.txt' l_r_sub1=${path#*/} l_r_sub2=${path##*/} r_l_sub1=${path%/*} r_l_sub2=${path%%/*} echo $l_r_sub1 echo $l_r_sub2 echo $r_l_sub1 echo $r_l_sub2
结果
root/test/abc.txt abc.txt C:/root/test C: