开发者社区> 问答> 正文

如何在Bash中切片数组

查看bash(1)手册页中的“数组”部分,我没有找到切片数组的方法。

所以我想到了这个过于复杂的功能:

#!/bin/bash

@brief: slice a bash array

@arg1: output-name

@arg2: input-name

@args: seq args

----------------------------------------------

function slice() { local output=$1 local input=$2 shift 2 local indexes=$(seq $*)

local -i i local tmp=$(for i in $indexes do echo "$(eval echo "${$input[$i]}")" done)

local IFS=$'\n' eval $output="( $tmp )" } 像这样使用:

$ A=( foo bar "a b c" 42 ) $ slice B A 1 2 $ echo "${B[0]}" # bar $ echo "${B[1]}" # a b c 有一个更好的方法吗?

展开
收起
保持可爱mmm 2020-01-16 17:46:26 585 0
1 条回答
写回答
取消 提交回答
  • 请参见Bash 页面中的“ 参数扩展”部分man。A[@]返回数组的内容,:1:2以长度为2的切片为起点,从索引1开始。

    A=( foo bar "a b c" 42 ) B=("${A[@]:1:2}") C=("${A[@]:1}") # slice to the end of the array echo "${B[@]}" # bar a b c echo "${B[1]}" # a b c echo "${C[@]}" # bar a b c 42 echo "${C[@]: -2:2}" # a b c 42 # The space before the - is necesssary 请注意,保留了“ ab c”是一个数组元素(并且它包含额外的空间)这一事实 问题来源于stack overflow

    2020-01-16 17:46:39
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载