$ {var#something}的用法是什么?

时间:2013-06-01 13:59:02

标签: shell

我正在查看一些shell脚本,我发现了类似

的内容
${var#*.}

如果$ var是111.txt那么

echo ${var#*.} 

将返回txt,这很好,我想知道原因,谢谢

3 个答案:

答案 0 :(得分:0)

${var#pattern}将找到变量值的模式(从开始,最短开始)并删除它,然后返回其余部分。
所以,你的模式意味着“任何事后跟一个。”,然后你留下一个“txt” 顺便说一下,${var##pattern}将删除最长的匹配模式
如果var=111.111.txt,则为 ${var#\*.}将返回111.txt
${var##\*.}将返回txt

答案 1 :(得分:0)

来自bash manual page

${parameter#word}
  

删除匹配的前缀模式   这个词被扩展为产生一个模式,就像路径名扩展一样。如果模式匹配参数值的开头,则扩展的结果是删除了最短匹配模式的参数的扩展值。

答案 2 :(得分:0)

之所以如此,是因为能够操作模式的部分字符串是非常有用的,因为它避免了昂贵的叉子和管道和

  

${#parameter}

     

字符串长度。参数值的字符长度   应代替。如果参数是'*'或'@',则结果为   扩张未指明。如果取消设置参数并设置-u   效果,扩张将失败。

     

以下四种参数扩展规定   子串处理。在每种情况下,模式匹配表示法(见   模式匹配表示法),而不是正则表达式表示法,   应用于评估模式。如果参数是'#','*'或   '@',扩展的结果未指定。如果未设置参数   并且set -u生效,扩展失败。全封闭   双引号中的参数扩展字符串不应该引起   以下四种类型的模式字符被引用,而   引用括号内的字符应具有此效果。每个   如果省略字,则应使用空图案。

     

${parameter%[word]}

     

删除最小的后缀模式。这个词应该扩展到产生   一种模式。然后参数扩展将产生参数,   后缀的最小部分与模式匹配   删除。如果存在,则单词不应以不带引号的'%'开头。

     

${parameter%%[word]}

     

删除最大的后缀模式。这个词应该扩展为产生一个   图案。然后参数扩展将产生参数   后缀的最大部分与删除的模式匹配。

     

${parameter#[word]}

     

删除最小的前缀模式。这个词应该扩展到产生   一种模式。然后参数扩展将产生参数,   前缀的最小部分与模式匹配   删除。如果存在,单词不应以不带引号的'#'开头。

     

${parameter##[word]}

     

删除最大的前缀模式。这个词应该扩展为产生一个   图案。然后参数扩展将产生参数   前缀的最大部分与删除的模式匹配。