我想模仿我在fish
Shell中拥有的一些功能。
说我有这个结构:
❯ 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
?
在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}
parameter
files[@]
#
parameter
/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句