unset array[0]
remove o elemento, mas ainda assim, se eu echo ${array[0]}
receber um valor nulo, além disso, existem outras maneiras de fazer isso, mas se um elemento de uma matriz contiver espaços como abaixo
array[0]='james young'
array[1]='mary'
array[2]='randy orton'
mas estes também não conseguem fazer o trabalho
array=${array[@]:1} #removed the 1st element
agora eu quero que a nova matriz seja
array[0]='mary'
array[1]='randy orton'
Os espaços causam problemas após a atribuição e a matriz real se torna semelhante à substituição.
array=(mary randy orton)
bash
shell
shell-script
array
munish
fonte
fonte
Respostas:
Basta usar a sintaxe da matriz na atribuição e citar sua variável:
Edite de acordo com a pergunta no comentário. Pois
$@
você pode usá-lo assim:fonte
zsh
cujas matrizes não são esparsas, ao contrário do ksh ou do bash.shift
?array=("${array[@]: -3}")
eset -- "${@: -3}"
. Tão preso em índices.shift $[$#-3]
nos últimos 3 é provavelmente muito mais rápido para$@
Isso me fez pensar. O problema com o sed / awk / tail é que eles são linha por linha. Depois de excluir a primeira linha, você deve escrever todas as outras linhas do espaço do padrão no arquivo.
Remova a primeira linha à medida que a despeja novamente no arquivo.
Apenas mude
largefile
para o nome do seu arquivo.fonte
sed -i 1d largefile
? Isso funciona mesmo para os ficheiros maiores do que RAM + swap dePara remover um elemento em um índice específico, podemos usar
unset
e copiar para outra matriz. Apenasunset
não é necessário neste caso. Comounset
não remove o elemento, apenas define uma string nula para o índice específico na matriz.Saída é
fonte
fonte