首页 > 解决方案 > 一行中的 bash 脚本中文件名的扩展名列表

问题描述

我目前有以下代码行:

ls /some/dir/prefix* | sed -e 's/prefix.//' | tr '\n' ' '

这确实实现了我想要它做的事情:

例如:

/some/dir/prefix.hello
/some/dir/prefix.world

应该成为

hello world

但我觉得有更好的方法来做到这一点。有没有更好的方法在一行中做到这一点?

标签: bashsedfilenameslstr

解决方案


这是一个仅使用内置函数的两行代码:

fnames=(some/dir/prefix*)
echo "${fnames[@]##*.}"

这就是它的工作原理:

  • fnames=(some/dir/prefix*)创建一个包含所有文件的数组,prefix并避免解析带来的所有问题ls
  • echo "${fnames[@]##*.}"是两个参数扩展的组合:${fnames[@]}打印所有数组元素,该##*.部分从每个数组元素中删除任何以结尾的最长匹配项.,只留下扩展名

如果您一心想要单线,只需将两个命令与&&.


推荐阅读