unset array[0]
menghapus elemen tetapi tetap jika saya lakukan echo ${array[0]}
saya mendapatkan nilai null apalagi ada cara lain untuk melakukan ini tetapi jika elemen array berisi spasi seperti di bawah ini
array[0]='james young'
array[1]='mary'
array[2]='randy orton'
tetapi ini juga gagal melakukan pekerjaan
array=${array[@]:1} #removed the 1st element
sekarang saya ingin seperti array baru
array[0]='mary'
array[1]='randy orton'
Spasi menyebabkan masalah setelah penugasan dan array aktual menjadi seperti dengan substitusi.
array=(mary randy orton)
bash
shell
shell-script
array
munish
sumber
sumber
Jawaban:
Cukup gunakan sintaks array pada tugas dan kutip variabel Anda:
Edit menurut pertanyaan dalam komentar. Untuk
$@
Anda bisa menggunakannya seperti ini:sumber
zsh
array yang jarang bertentangan dengan ksh atau bash.shift
?array=("${array[@]: -3}")
danset -- "${@: -3}"
. Jadi terjebak pada indeks.shift $[$#-3]
untuk 3 terakhir mungkin jauh lebih cepat untuk$@
Ini membuat saya berpikir. Masalah dengan sed / awk / tail adalah bahwa mereka baris demi baris. Setelah Anda menghapus baris pertama Anda harus menulis setiap baris lainnya dari ruang pola ke file.
Hapus baris pertama karena akan mengembalikannya ke file.
Ubah saja
largefile
ke nama file Anda.sumber
sed -i 1d largefile
saja? Ini bahkan berfungsi untuk file yang lebih besar dari RAM + swapUntuk menghapus elemen pada indeks tertentu, kita dapat menggunakan
unset
dan kemudian menyalin ke array lain. Hanya sajaunset
tidak diperlukan dalam kasus ini. Karenaunset
tidak menghapus elemen itu hanya menetapkan string nol ke indeks tertentu dalam array.Output adalah
sumber
sumber