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)
bash
shell
shell-script
array
Munish
источник
источник
Ответы:
Просто используйте синтаксис массива в присваивании и укажите вашу переменную в кавычках:
Редактировать в соответствии с вопросом в комментарии. Ибо
$@
вы можете использовать это так:источник
zsh
чьи массивы не редки, в отличие от ksh или bash.shift
?array=("${array[@]: -3}")
иset -- "${@: -3}"
. Так что застрял на индексах.shift $[$#-3]
для последних 3, вероятно, гораздо быстрее для$@
Это заставило меня задуматься. Проблема с sed / awk / tail в том, что они построчно. После того, как вы удалите первую строку, вы должны записать каждую вторую строку из пространства шаблона в файл.
Удалите первую строку, так как она возвращает ее обратно в файл.
Просто измените
largefile
имя вашего файла.источник
sed -i 1d largefile
вместо этого? Это даже работает для файлов больше, чем RAM + swapЧтобы удалить элемент по определенному индексу, мы можем использовать
unset
и затем сделать копию в другой массив. Только простоunset
не требуется в этом случае. Посколькуunset
не удаляет элемент, он просто устанавливает нулевую строку для определенного индекса в массиве.Выход
источник
источник