查看bash(1)手册页中的“数组”部分,我没有找到切片数组的方法。
所以我想到了这个过于复杂的功能:
#!/bin/bash
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 页面中的“ 参数扩展”部分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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。