重击:无法从数组中删除前3个元素

时间:2019-01-31 10:24:34

标签: bash shell scripting

我有一个数组,该数组是从文件中获得的。这个数组包含空元素,我不需要使用数组中的前3个元素。我需要删除所有这些内容。

 FILE="$1"

 index=0
 while read name; do
    get_group_names_from_file[$index]="$name"
    index=$(($index+1))
 done < "${FILE}"

 for i in 2; do
   unset get_group_names_from_file[$i]
 done

 for ((a=0; a < ${#get_group_names_from_file[*]}; a++))
 do
   echo "${get_group_names_from_file[$a]}"
 done

取消设置只是将我的前2个元素替换为空元素。如何从get_group_names_from_file中删除空元素?

更新:

我从数组中删除了前2个元素,最后一个问题是从数组中删除了空元素;我该怎么办?

1 个答案:

答案 0 :(得分:0)

使用参数扩展:

#!/bin/bash
arr=(abc def 'ghi jkl' mno)
arr=("${arr[@]:2}")
printf '<%s>\n' "${arr[@]}"

您也可以使用shift。但是,它仅对正弦参数起作用,因此您需要使用set,然后将结果分配回去:

#!/bin/bash
arr=(abc def 'ghi jkl' mno)
set -- "${arr[@]}"
shift 2
arr=("$@")
printf '<%s>\n' "${arr[@]}"