我正在尝试理解表达式f2=${f%????}
在bash脚本中的含义。
我尝试在网络上搜索一些参考,但没有发现有用的东西。
我正在使用的代码是:
for f in "$@"
do
f2=${f%????}
/usr/bin/openssl smime -in "$f" -verify -inform DER -noverify -out "$f2"
done
答案 0 :(得分:1)
bash手册中的Shell Parameter Expansion下对此进行了记录:
${parameter%word}
${parameter%%word}
单词被扩展以产生模式并根据以下描述的规则进行匹配(请参见Pattern Matching)。如果该模式与 parameter 的扩展值的尾部部分匹配,则扩展结果为匹配模式最短的 parameter 的值({{1} }大小写)或最长匹配模式(
%
大小写)被删除。如果 parameter 是%%
或@
,则将模式删除操作依次应用于每个位置参数,并且扩展为结果列表。如果parameter是下标为*
或@
的数组变量,则将模式删除操作依次应用于数组的每个成员,并且扩展为结果列表。
换句话说,*
是${f%????}
的值,最后四个字符被删除。
您还可以编写$f
,这也许会更清楚一些。