【问题标题】:percent symbol in Bash, what's it used for? [duplicate]Bash 中的百分号,它是干什么用的? [复制]
【发布时间】:2016-04-29 08:38:23
【问题描述】:

我有一个以 .zip 结尾的文件名,我只想要没有 zip 的文件名。在这里我发现了一个 bash 的技巧。

$f="05 - Means-End Analysis Videos.zip"
$echo "${f%*.zip}"
05 - Means-End Analysis Videos

这里发生了什么? %*.zip 怎么会删除我的扩展程序?

【问题讨论】:

  • 另外,* 是多余的(在单个 % 之后使用时总是不匹配)。
  • 请注意,% 字符在 bash 中的另一种用法是,如果像 vim 这样的程序被 ctrl-z 挂起,那么 %vim 命令会恢复它,比如 fg
  • 正如another comment 中已经指出的那样,* 没有多大意义。 sn -p "${f%*.zip}" 表示保留f 的内容,但删除最后出现的.zip。 * ~ * ~ * 所以在"05 - Means-End Analysis Videos.zip" 中简单地剪掉.zip 得到"05 - Means-End Analysis Videos"

标签: bash


【解决方案1】:

从开头删除$varstring的最短匹配:

${var#string}

从开头删除$varstring的最长匹配:

${var##string}

从末尾删除$varstring的最短匹配:

${var%string}

从末尾删除$varstring的最长匹配:

${var%%string}

试试:

var=foobarbar
echo "${var%b*r}"
> foobar
echo "${var%%b*r}"
> foo

【讨论】:

  • 这个答案很好,尽管来这里的任何感兴趣的读者可能想将它与this answer 进行比较(我会说稍微详细一点)。
猜你喜欢
  • 2014-10-04
  • 1970-01-01
  • 2018-01-28
  • 2012-11-19
  • 2013-09-14
  • 2014-10-15
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
相关资源
最近更新 更多