在Bash中删除数组中每个元素的开头和结尾

时间:2017-02-21 00:46:05

标签: arrays bash unix

我有一个包含3个元素的bash数组,我需要从所有元素中删除前X个数字字符,并从所有元素中删除最后Y个字符。如何实现这一目标。示例如下:

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

我希望这个数组成为

echo ${array[@]}
file1 file2 file3

如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

这将是一次性的:

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

Offcourse,可以包含在$()中,以便分配给变量。

答案 1 :(得分:0)

只需一步就无法做到这一点;但是,您可以先删除前缀,然后删除后缀。

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

答案 2 :(得分:-1)

你仍然可以在那里使用基本的字符串操作:

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

或者,将它分配给数组:

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