f2 = $ {f%????}的意思是什么?

时间:2019-08-15 10:52:34

标签: bash parameter-expansion

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

我尝试在网络上搜索一些参考,但没有发现有用的东西。

我正在使用的代码是:

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

1 个答案:

答案 0 :(得分:1)

bash手册中的Shell Parameter Expansion下对此进行了记录:

  

${parameter%word}
  ${parameter%%word}

     

单词被扩展以产生模式并根据以下描述的规则进行匹配(请参见Pattern Matching)。如果该模式与 parameter 的扩展值的尾部部分匹配,则扩展结果为匹配模式最短的 parameter 的值({{1} }大小写)或最长匹配模式(%大小写)被删除。如果 parameter %%@,则将模式删除操作依次应用于每个位置参数,并且扩展为结果列表。如果parameter是下标为*@的数组变量,则将模式删除操作依次应用于数组的每个成员,并且扩展为结果列表。

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

您还可以编写$f,这也许会更清楚一些。