我正在查看一些shell脚本,我发现了类似
的内容${var#*.}
如果$ var是111.txt那么
echo ${var#*.}
将返回txt,这很好,我想知道原因,谢谢
答案 0 :(得分:0)
${var#pattern}
将找到变量值的模式(从开始,最短开始)并删除它,然后返回其余部分。
所以,你的模式意味着“任何事后跟一个。”,然后你留下一个“txt”
顺便说一下,${var##pattern}
将删除最长的匹配模式
如果var=111.111.txt
,则为
${var#\*.}
将返回111.txt
${var##\*.}
将返回txt
答案 1 :(得分:0)
${parameter#word}
删除匹配的前缀模式 这个词被扩展为产生一个模式,就像路径名扩展一样。如果模式匹配参数值的开头,则扩展的结果是删除了最短匹配模式的参数的扩展值。
答案 2 :(得分:0)
之所以如此,是因为能够操作模式的部分字符串是非常有用的,因为它避免了昂贵的叉子和管道和
${#parameter}
字符串长度。参数值的字符长度 应代替。如果参数是'*'或'@',则结果为 扩张未指明。如果取消设置参数并设置-u 效果,扩张将失败。
以下四种参数扩展规定 子串处理。在每种情况下,模式匹配表示法(见 模式匹配表示法),而不是正则表达式表示法, 应用于评估模式。如果参数是'#','*'或 '@',扩展的结果未指定。如果未设置参数 并且set -u生效,扩展失败。全封闭 双引号中的参数扩展字符串不应该引起 以下四种类型的模式字符被引用,而 引用括号内的字符应具有此效果。每个 如果省略字,则应使用空图案。
${parameter%[word]}
删除最小的后缀模式。这个词应该扩展到产生 一种模式。然后参数扩展将产生参数, 后缀的最小部分与模式匹配 删除。如果存在,则单词不应以不带引号的'%'开头。
${parameter%%[word]}
删除最大的后缀模式。这个词应该扩展为产生一个 图案。然后参数扩展将产生参数 后缀的最大部分与删除的模式匹配。
${parameter#[word]}
删除最小的前缀模式。这个词应该扩展到产生 一种模式。然后参数扩展将产生参数, 前缀的最小部分与模式匹配 删除。如果存在,单词不应以不带引号的'#'开头。
${parameter##[word]}
删除最大的前缀模式。这个词应该扩展为产生一个 图案。然后参数扩展将产生参数 前缀的最大部分与删除的模式匹配。