Bash

如何從數組中完全刪除元素?

  • April 3, 2018

unset array[0]刪除元素,但如果我這樣做,echo ${array[0]}我仍然會得到一個空值此外還有其他方法可以做到這一點,但如果數組的元素包含如下所示的空格

array[0]='james young'
array[1]='mary'
array[2]='randy orton'

但這些也無法完成工作

array=${array[@]:1} #removed the 1st element

現在我希望新數組像

array[0]='mary'
array[1]='randy orton'

分配後空格會導致麻煩,實際數組變得像替換一樣。

array=(mary randy orton)

只需在賦值上使用數組語法並引用您的變數:

array=("${array[@]:1}") #removed the 1st element

根據評論中的問題進行**編輯。**因為$@你可以像這樣使用它:

set -- "${@:2}" #removed the 1st parameter

這讓我思考。sed/awk/tail 的問題在於它們是逐行的。刪除第一行後,您必須將模式空間中的每隔一行寫入文件。

  • 您可以使用以下命令在幾秒鐘內完成您想做的事情。
  • 這會將整個文件寫入數組。
  • 刪除第一行,因為它將它轉儲回文件中。
readarray -t aLargeFile < <(cat largefile)
echo "${aLargeFile[@]:1}" >largefile

只需將 更改largefile為您的文件的名稱。

引用自:https://unix.stackexchange.com/questions/68322