【问题标题】:What does the statement, f2=${f%????} , mean? [duplicate]语句 f2=${f%????} 是什么意思? [复制]
【发布时间】:2019-08-15 10:52:34
【问题描述】:

我试图理解表达式 f2=${f%????} 在 bash 脚本中的含义。

我尝试在网上搜索一些参考资料,但没有找到有用的东西。

我使用的代码是:

for f in "$@"
do
f2=${f%????}
/usr/bin/openssl smime -in "$f" -verify -inform DER -noverify -out "$f2"
done

【问题讨论】:

标签: bash parameter-expansion


【解决方案1】:

这在Shell Parameter Expansion 下的 bash 手册中有记录:

${<em>parameter</em>%<em>word</em>}
${<em>parameter</em>%%<em>word</em>}

单词被扩展以产生一个模式并根据下面描述的规则进行匹配(参见Pattern Matching)。如果模式匹配 parameter 扩展值的尾随部分,则扩展结果是具有最短匹配模式的 parameter 值(% 情况) 或最长的匹配模式(%% 案例)被删除。如果 parameter@*,则对每个位置参数依次应用模式去除操作,展开就是结果列表。如果 parameter 是下标为@* 的数组变量,则模式移除操作依次应用于数组的每个成员,展开就是结果列表。

换句话说,${f%????}$f 的值,删除了最后四个字符。

你也可以写${f:0:-4},这样可能更清楚一点。

【讨论】:

  • ${f%????} 是标准的。不过,这样做的目的很可能是从文件名中删除 3 个字母的扩展名和 .,在这种情况下,更具体的名称(如 ${f%.???})会更好。
  • 感谢您的回答和 cmets。它们非常有用。
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多