首页 > 解决方案 > 语句 f2=${f%????} 是什么意思?

问题描述

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

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

我正在使用的代码是:

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

标签: bashparameter-expansion

解决方案


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

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

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

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

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


推荐阅读