bash - 语句 f2=${f%????} 是什么意思?
问题描述
我试图理解表达式f2=${f%????}
在 bash 脚本中的含义。
我尝试在网上搜索一些参考资料,但没有找到有用的东西。
我正在使用的代码是:
for f in "$@"
do
f2=${f%????}
/usr/bin/openssl smime -in "$f" -verify -inform DER -noverify -out "$f2"
done
解决方案
这记录在 bash 手册中的Shell Parameter Expansion下:
${parameter%word}
${parameter%%word}
该词被扩展以产生一个模式并根据下面描述的规则进行匹配(请参阅模式匹配)。如果模式匹配parameter扩展值的尾随部分,则扩展的结果是删除了最短匹配模式(案例)或最长匹配模式(案例)的参数值。如果parameter是或,模式移除操作将依次应用于每个位置参数,展开是结果列表。如果参数是一个以or为下标的数组变量
%
%%
@
*
@
*
,模式去除操作依次应用于数组的每个成员,展开就是结果列表。
换句话说,${f%????}
就是$f
删除最后四个字符的值。
你也可以写${f:0:-4}
,这可能更清楚一点。
推荐阅读
- django - 通过 pytest 运行时未完成登录视图
- c - Linux 内核中如何解决线程本地存储偏移?
- vuetify.js - Vuetify 辅助类和道具
- built-in - 在哪里可以找到 IDL 的内置函数(INTERPOLATE、GRID_TPS 和 TRIGRID)的源代码?
- orm - 使用负索引加速 sqlalchemy orm 动态关系切片
- python - 如何在 PyQt5 中捕获 QTableWidget 上的左右鼠标单击事件?
- python - 通过访问 Uniprot(使用 Python)获取蛋白质序列
- javascript - 多次导入 ES6 模块?
- intellij-idea - 在 IntelliJ 上的单个 YAML 文件中突出显示 SQL 语法
- c# - EF Core,按月和年分组,带 UTC 日期