linux - 解释 ${test##*.} 和 ${test%%.*} 如何工作?

标签 linux bash

有没有好的方法来解释下面的工作原理?

~$ echo $test
en.to.tre
~$ echo ${test}
en.to.tre
~$ echo ${test%.*}
en.to
~$ echo ${test%%.*}
en
~$ echo ${test#*.}
to.tre
~$ echo ${test##*.}
tre

特别是我不明白为什么在从左/右删除/保留时必须交换 .*

最佳答案

.* 表示“以 . 开头的子字符串”; *. 表示“以 . 结尾的子字符串”。 在第三行和第四行中,从末尾删除以 . 开始的最短/最长子字符串;在第五行和第六行中,从开头删除以 . 结尾的最短/最长子字符串。

#% 等后面的字符串被解释为通配模式(如文件名),而不是正则表达式,因此 . 代表其自身。

关于linux - 解释 ${test##*.} 和 ${test%%.*} 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16790345/

相关文章:

python - 哪些信息描述了两个相同大小的给定大文件之间的数量差异?

PHP ODBC 扩展 - 数据源名称太长

linux - AndroidStudio - 错误 - llij.ide.plugins.PluginManager - java.lang.NullPointerException

Bash 方法根据索引列表比较两个不同文件中的特定列

arrays - Bash格式化数组

linux - 用于在列表中查找文件的 Bash 脚本,将它们复制到 dest,打印未找到的文件

linux截断第一行-有没有更好的方法

c - 加载使用另一个共享库的共享库

python - 将字符串转换为数组 python

bash - Git 预提交钩子(Hook)检查字符串,如果字符串存在则退出代码 1