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

前端之家收集整理的这篇文章主要介绍了数组 – 如何在bash中切割数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
(编辑适合答案)

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

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

  1. #!/bin/bash
  2.  
  3. # @brief: slice a bash array
  4. # @arg1: output-name
  5. # @arg2: input-name
  6. # @args: seq args
  7. # ----------------------------------------------
  8. function slice() {
  9. local output=$1
  10. local input=$2
  11. shift 2
  12. local indexes=$(seq $*)
  13.  
  14. local -i i
  15. local tmp=$(for i in $indexes
  16. do echo "$(eval echo \"\${$input[$i]}\")"
  17. done)
  18.  
  19. local IFS=$'\n'
  20. eval $output="( \$tmp )"
  21. }

使用像这样:

  1. $ A=( foo bar "a b c" 42 )
  2. $ slice B A 1 2
  3. $ echo "${B[0]}" # bar
  4. $ echo "${B[1]}" # a b c

有更好的方法吗?

请参见Bash手册页中的 Parameter Expansion部分。 A [@]返回数组的内容,:1:2采用长度为2的切片,从索引1开始。
  1. A=( foo bar "a b c" 42 )
  2. B=("${A[@]:1:2}")
  3. C=("${A[@]:1}") # slice to the end of the array
  4. echo "${B[@]}" # bar a b c
  5. echo "${B[1]}" # a b c
  6. echo "${C[@]}" # bar a b c 42

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

猜你在找的Bash相关文章