河南网站推广怎么做专业苏州网站建设公司哪家好
在Linux的Shell脚本中,#和%用于字符串截取,通过通配符模式匹配删除部分内容
批量修改文件名技巧:Linux下#、##、%、%%符号操作详解-CSDN博客
从左截取(# 和 ##)
-
#:删除最短匹配左侧内容。 -
##:删除最长匹配左侧内容。
path="/home/user/docs/file.txt"
echo ${path#*/} # 输出 "home/user/docs/file.txt"(删除第一个/及左侧)
echo ${path##*/} # 输出 "file.txt"(删除最后一个/及左侧)
从右截取(% 和 %%)
-
%:删除最短匹配右侧内容。 -
%%:删除最长匹配右侧内容。
file="data.tar.gz"
echo ${file%.*} # 输出 "data.tar"(删除最后一个.及右侧)
echo ${file%%.*} # 输出 "data"(删除第一个.及右侧)
常见用例
提取文件名:
path="/path/to/file.txt"
filename=${path##*/} # 输出 "file.txt"
提取目录路径:
dir=${path%/*} # 输出 "/path/to"
去除文件扩展名:
name=${file%.*} # 输出 "data.tar"(针对多级扩展)
获取文件后缀:
suffix=${file##*.} # 输出 "gz"
注意事项
-
贪婪匹配:双符号(
##或%%)会尽可能多删除匹配内容。 -
无匹配时:若模式未匹配,返回原字符串。
-
通配符支持:使用
*、?、[...]等通配符进行模式匹配。
示例解析
url="http://example.com/path"
domain=${url#*//} # 删除"http://",得 "example.com/path"
domain=${domain%%/*} # 删除最长右侧匹配,得 "example.com"
-
#和##从左删除,适用于提取右侧内容。 -
%和%%从右删除,适用于提取左侧内容。
