加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组 – 如何在bash中切割数组

发布时间:2020-12-15 16:55:11 所属栏目:安全 来源:网络整理
导读:(编辑适合答案) 查看bash(1)手册页中的“Array”部分,我没有找到一种方法来切割bash数组。 所以我想出了这个过于复杂的功能: #!/bin/bash# @brief: slice a bash array# @arg1: output-name# @arg2: input-name# @args: seq args# -----------------------
(编辑适合答案)

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

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

#!/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

有更好的方法吗?

请参见Bash手册页中的 Parameter Expansion部分。 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

注意,“a b c”是一个数组元素(并且它包含额外的空间)的事实被保留。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读