我对模式匹配运算符有一些疑问。
这些例子之间的区别
$ VAR=/usr/bin/iecset
$ echo ${VAR#*/}
usr/bin/iecset
和
$ VAR=/usr/bin/iecset
$ echo ${VAR##*/}
iecset
和
$ VAR=/usr/bin/iecset
$ echo ${VAR%*/}
/bin/iecset
和
$ VAR=/usr/bin/iecset
$ echo ${VAR%%*/}
答案 0 :(得分:0)
"模式"这是一个 glob 或扩展的glob 模式 - 大多数人称它们为通配符。这些字符与正则表达式中使用的字符具有不同的含义。所以*
表示"零个或多个任何字符"。
${var#pattern} # delete shortest match of pattern from left
${var##pattern} # delete longest match of pattern from left
${var%pattern} # delete shortest match of pattern from right
${var%%pattern} # delete longest match of pattern from right
您的示例:
(使用大写变量名称的好主意)
提示:
*
位于左侧。#
从左侧删除,因为#
位于&#34左侧;我们是#1" %
从右侧删除,因为%
位于右侧50% var=/usr/bin/iecset
删除左侧最短的字符串,以
结尾echo ${var#*/}
usr/bin/iecset
第一个/左边没有字符,请记住*
表示零或更多。所以最左边的/被删除了。
删除左侧最长的字符串,以/
结尾echo ${var##*/}
iecset
你的帖子中接下来的两个错了!要从右侧删除,*
应位于/.
$ echo ${VAR%*/} # WRONG
$ echo ${VAR%%*/} # WRONG
我认为你的意思是:
从/
开始删除右侧最短的字符串var=/usr/bin/iecset
echo ${var%/*}
/usr/bin
删除右侧最长的字符串,以/
开头echo ${var%%/*}
(blank line)
除了*
之外,您还可以使用许多其他元字符。