我们必须从字符串中获取“文件名”和“文件扩展名”
[sathish@oc Desktop]$ export FILE="filename.txt"
以下语法工作正常。然而,我们想了解 '##.' 是如何实现的。和 '%.' 有效
[sathish@oc Desktop]$ echo ${FILE##*.}
txt
[sathish@oc Desktop]$ echo ${FILE%.*}
filename
任何帮助都会很好
最佳答案
您的起点是阅读 bash manual ,特别是关于 Shell Parameter Expansion 的部分.
一些相关摘录:
${parameter#word}
${parameter##word}
这个词 被扩展以产生一个模式,就像文件名中一样 扩展(请参阅文件名扩展)。如果模式匹配 参数扩展值的开始, 那么展开的结果就是参数展开后的值 使用最短的匹配模式(“#”大小写)或 最长匹配模式(“##”大小写)已删除。 如果参数是“@”或“”, 图案去除操作应用于每个位置 依次参数,展开就是结果列表。 如果参数是下标为的数组变量 ‘@’或‘’, 模式移除操作应用于每个成员 依次数组,扩展就是结果列表。
${参数%word}
${参数%%word}
该单词被扩展以产生一个模式,就像 文件名扩展。 如果模式与扩展值的尾部部分匹配 参数,那么展开的结果就是 具有最短匹配模式的参数(‘%’的情况) 或删除最长的匹配模式(‘%%’大小写)。 如果参数是“@”或“”, 图案去除操作应用于每个位置 依次参数,展开就是结果列表。 如果参数 是一个数组变量,下标为“@”或“”, 模式移除操作应用于每个成员 依次数组,扩展就是结果列表。
关于linux - shell中的##和%是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39381344/