Bash 模式匹配操作符之间有什么区别?
我有一些关于模式匹配操作符的问题 这些例子之间有什么区别Bash 模式匹配操作符之间有什么区别?,bash,pattern-matching,sh,Bash,Pattern Matching,Sh,我有一些关于模式匹配操作符的问题 这些例子之间有什么区别 $ VAR=/usr/bin/iecset $ echo ${VAR#*/} usr/bin/iecset 及 及 及 这里的“模式”是一个glob或扩展glob模式——大多数人称之为通配符。这些字符与正则表达式中使用的字符具有不同的含义。所以*表示“任何字符的零个或多个” 你的例子: (使用大写变量名是个坏主意) 提示: 要从左侧删除,左侧将显示* #从左侧删除,因为#在“We are#1”中位于左侧 %从右侧删除,因为%位于右侧
$ VAR=/usr/bin/iecset
$ echo ${VAR#*/}
usr/bin/iecset
及
及
及
这里的“模式”是一个glob或扩展glob模式——大多数人称之为通配符。这些字符与正则表达式中使用的字符具有不同的含义。所以*
表示“任何字符的零个或多个”
你的例子:
(使用大写变量名是个坏主意)
提示:
*
#
从左侧删除,因为#
在“We are#1”中位于左侧%
从右侧删除,因为%
位于右侧的50%var=/usr/bin/iecset
删除以中结尾的左侧最短字符串/
echo ${var#*/}
usr/bin/iecset
echo ${var##*/}
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)
删除右侧以开头的最长字符串/
var=/usr/bin/iecset
echo ${var%/*}
/usr/bin
echo ${var%%/*}
(blank line)
除了
*
之外,还有许多其他元字符可以使用。Bash手册中没有清楚地解释这一区别吗?我可以发布一个答案,但我基本上只是引用手册中的内容。如果您不确定文档记录在哪里,请参阅Thank@Barmar我没有在文档中搜索,我看了这节课,但不明白