【问题标题】:Remove Beginning And End Of Each Element In Array In Bash在 Bash 中删除数组中每个元素的开头和结尾
【发布时间】:2017-02-21 10:18:27
【问题描述】:

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

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

我希望这个数组变成

echo ${array[@]}
file1 file2 file3

如何做到这一点?

【问题讨论】:

标签: arrays bash unix


【解决方案1】:

这将是一个镜头:

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

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

【讨论】:

  • 这正是我想要的,而不是你!
【解决方案2】:

没有办法一步到位;但是,您可以先删除前缀,然后再删除后缀。

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

【讨论】:

    【解决方案3】:

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

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

    或者,将其分配给数组:

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

    【讨论】:

    • 这只完成了问题的一半。
    • 啊检查,好吧,我只添加了 is 作为占位符,直到我们有足够的重复投票;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2013-05-27
    相关资源
    最近更新 更多