bash - 如何在 bash 脚本中正确处理 .js 扩展名?
问题描述
我有以下 bash 脚本。
while IFS= read -r filename;
do [[ $(md5 path/to/"$filename-orig") = $(md5 path/to/"$filename") ]] || echo $filename differs;
done < path/to/list-of-files-to-compare.txt
它应该比较两个文件(通过计算它们的 MD5 哈希摘要)然后报告它们是否不同。它从列表中获取要比较的文件。
问题是,如果我要读取的文件位于,比如说,
path/to/foo-orig.js
该脚本将在以下位置查找文件
path/to/foo.js-orig
而且,显然,这会引发错误并失败。
如何更正脚本中的这个错误,以便.js
正确处理扩展?
编辑
TL;博士:
给定一个字符串foo.bar
我怎么能得到foo-orig.bar
?
解决方案
如果我理解正确,您实际上只是在问:给定一个字符串foo.bar
,我怎样才能得到一个字符串foo-orig.bar
?这可以这样做:
$ f="path/to/foo.js"
$ echo "${f%.js}-bak.js"
path/to/foo-bak.js
它记录在参数扩展 下man bash
:
${parameter%word}
${parameter%%word}
删除匹配的后缀模式。单词被扩展以产生一个模式,就像在路径名扩展中一样。如果模式匹配参数扩展值的尾随部分,则扩展的结果是删除了最短匹配模式("%"
案例)或最长匹配模式(案例)的参数扩展值。"%%"
如果 parameter 是@
或*
,模式移除操作将依次应用于每个位置参数,展开是结果列表。@
如果 parameter 是一个以or为下标的数组变量*
,则模式删除操作将依次应用于数组的每个成员,并且展开是结果列表。
推荐阅读
- php - PHP 7 的路径 - 使用“|” 特点
- mysql - MySQL 查询 - 显示更高的“薪水”
- python - 带有二维索引的 numpy 多维选择
- php - CakePHP 3.6.14:在引导模式中呈现视图 (.ctp)
- android - 如何轻松访问在按钮单击时膨胀的片段中的视图?
- javascript - 如何从 Google API 检索用户名
- c# - 如何在 C# 中基于级联下拉列表在文本框中显示固定数据?
- ios - 使用集合视图交换卡片
- c - realloc():C 程序中的下一个大小错误无效
- ios - iOS Cocoalumberjack:ThreadId 和 ProcessId 未在 File Logger 中打印,但在 TTY 控制台日志中打印