bash - 一行中的 bash 脚本中文件名的扩展名列表
问题描述
我目前有以下代码行:
ls /some/dir/prefix* | sed -e 's/prefix.//' | tr '\n' ' '
这确实实现了我想要它做的事情:
- 获取以前缀开头的文件列表
- 从每个字符串中删除路径和前缀
- 删除换行符并用空格替换以供以后处理。
例如:
/some/dir/prefix.hello
/some/dir/prefix.world
应该成为
hello world
但我觉得有更好的方法来做到这一点。有没有更好的方法在一行中做到这一点?
解决方案
这是一个仅使用内置函数的两行代码:
fnames=(some/dir/prefix*)
echo "${fnames[@]##*.}"
这就是它的工作原理:
fnames=(some/dir/prefix*)
创建一个包含所有文件的数组,prefix
并避免解析带来的所有问题ls
echo "${fnames[@]##*.}"
是两个参数扩展的组合:${fnames[@]}
打印所有数组元素,该##*.
部分从每个数组元素中删除任何以结尾的最长匹配项.
,只留下扩展名
如果您一心想要单线,只需将两个命令与&&
.
推荐阅读
- vespa - 如何在 vespa.ai 中找到不同的记录?
- prismic.io - 棱镜 - 为组中的可重复元素设置最大值
- node.js - GCP Cloud 构建忽略超时设置
- jquery - 输入字段中的输入键上的多步进度条更改状态
- sql - 如何从其他地方选择具有不同 WHERE 语句的东西
- mysql - 如何根据 MySQL 中的列值删除重复行?
- reactjs - Webpack 4,babel 7,反应,打字稿:意外的令牌,预期的“,”
- powershell - 如何运行同时使用本地和提升权限的 powershell 脚本?
- java - 如何在控制器中使用 @RequestBody 将值映射到 DTO 时忽略 @JsonProperty 值
- c# - IHttpContextAccessor 中的声明为空