【问题标题】:What does this '${image##*/}' brace expansion do? [duplicate]这个 '${image##*/}' 大括号扩展有什么作用? [复制]
【发布时间】:2019-10-20 03:09:36
【问题描述】:

我无法理解这段代码 sn-p 中以下扩展的用途:

image=$1
image_id=${image##*/}

我尝试对image 的多个值执行echo ${image##*/},但每次都得到相同的结果。这段代码可以去掉吗?

$ image='var3-image'
$ echo ${image##*/}
var3-image
$ image=''
$ echo ${image##*/}

$ image='var3-image:asfd'
$ echo ${image##*/}
var3-image:asfd
$ image='var3-image#asfd**'
$ echo ${image##*/}
var3-image#asfd**

【问题讨论】:

  • 这不是大括号扩展;这是一个参数扩展。 (大括号扩展是指将foo{1,2,3} 扩展为foo1 foo2 foo3。)

标签: bash shell


【解决方案1】:

这会从字符串中删除前导 / 字符。

$ image='/vra3-image`
$ echo ${image##*/}
vra3-image

从此链接:(http://tldp.org/LDP/abs/html/string-manipulation.html)

子串删除

${string#substring} 从前面删除 $substring 的最短匹配 $字符串。

${string##substring} 从前面删除 $substring 的最长匹配 $字符串。

【讨论】:

  • 不,它会删除从最后一个斜杠开始的所有前缀 - 在常见的用例中,任何前导目录名称。
猜你喜欢
  • 2022-07-12
  • 2017-10-15
  • 2018-05-09
  • 2013-10-26
  • 2022-01-06
  • 1970-01-01
  • 2012-02-07
  • 2011-08-14
相关资源
最近更新 更多