linux - shell中的##和%是什么意思?

标签 linux shell unix

我们必须从字符串中获取“文件名”和“文件扩展名”

[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/

相关文章:

c - 我的功能拒绝存在

c - 为什么 execvp 接受 2 个参数

python - USB串口数据发送乱码

shell - zsh 和动态变量

linux - 根据字典替换文本

linux - SSH 后的初始欢迎消息(横幅)不允许命令正确执行

linux - 谁能解释一下这个 bash 脚本中发生了什么?

php - Linux命令从所有目录和子目录中获取所有文件、文件大小和路径

linux - 使用 'rm' 命令删除文件/文件夹时如何启用确认警报?

Bash:是否可以通过评估命令为单个子进程设置环境变量?