我目前有以下代码行:
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[@]}
打印所有数组元素,##*.
部分从每个数组元素中删除以.
结尾的任何内容的最长匹配,只留下扩展名
如果您执意使用单行代码,只需使用 &&
连接这两个命令即可。
关于bash - 一行中 bash 脚本中的文件扩展名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024506/