前缀由路径名扩展产生的每个单词

森林Rumcajs

我想模仿我在fishShell中拥有的一些功能

说我有这个结构:

❯ tree
.
└── a
    ├── 1.txt
    ├── 2.txt
    └── 3.txt   

我想摆脱目录a并添加前缀b(更一般而言,我需要将path映射a到path b)。

fish我简单地做:

❯ echo b/(basename a/*.txt)
b/1.txt b/2.txt b/3.txt 

但是,同样的技巧bash仅是第一个要素的前提。

$echo b/$(basename a/*.txt)
b/1.txt 2.txt 3.txt 

是什么赋予了?如何以一种不错的方式模仿此行为,最佳方式是在bash或中没有循环sh

本杰明W.

在Bash中,您可以从全局创建数组:

$ files=(a/*.txt)
$ declare -p files
declare -a files=([0]="a/1.txt" [1]="a/2.txt" [2]="a/3.txt")

然后使用参数扩展将贪婪匹配的每个前缀替换*/b/

$ echo "${files[@]/#*\//b\/}"
b/1.txt b/2.txt b/3.txt

扩展是扩展的一种情况,其中(适用于每个数组元素),并且模式以(在的扩展值开头匹配)开头由于元素之间用分隔,因此必须避免模式和替换中的斜线。${parameter/pattern/string}parameterfiles[@]#parameter/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章