2017-02-21 33 views
0

我有一个包含3个元素的bash数组,我需要从所有元素中删除第一个X数字字符,并从所有元素中删除最后的Y个字符。这怎么能实现。下面的例子:在Bash中删除数组中的每个元素的开始和结束

echo ${array[@]} 
random/path/file1.txt random/path/file2.txt random/path/file3.txt 

我想这个数组成为

echo ${array[@]} 
file1 file2 file3 

如何才能实现这一目标?

+2

可能重复的[如何更改bash数组元素的值而不使用循环](http://stackoverflow.com/questions/12744031/how-to-change-values-of-bash-array-elements-without-loop ) – Wrikken

回答

1

这将大大有一个镜头:

$ a=("/path/to/file1.txt" "path/to/file2.txt") 
$ basename -a "${a[@]%.*}" 
file1 
file2 

Offcourse,可以在$(),以包围被分配给一个变量。

+0

这正是我想要的,比你! – mattman88

-1

,您仍然可以使用有基本的字符串操作:

echo ${array[@]##*/} 

或者,将其分配到数组:

array=(${array[@]##*/}) 
+0

这只是问题提问的一半。 – chepner

+0

啊检查,嗯,我只是添加了作为占位符,直到我们有足够的重复投票;) – Wrikken

0

有没有办法,只需一个步骤做到这一点;但是,您可以先删除前缀,然后删除后缀。

array=("${array[@]##*/") # Remove the longest prefix matching */ from each element 
array=("${array[@]%.*}") # Remove the shortest suffix match .* from each element 
相关问题