Можно также сделать это без способности путем выполнения apt-cache show <packagename>
Просто используйте синтаксис массива на присвоении и заключите Вашу переменную в кавычки:
array=("${array[@]:1}") #removed the 1st element
Редактирование согласно вопросу в комментарии. Для $@
можно использовать его как это:
set -- "${@:2}" #removed the 1st parameter
#!/bin/bash
q=( one two three four five )
echo -e "
(remove) { [:range:] } <- [:list:]
| [:range:] => return list with range removed range is in the form of [:digit:]-[:digit:]
"
function remove {
if [[ $1 =~ ([[:digit:]])(-([[:digit:]]))? ]]; then
from=${BASH_REMATCH[1]}
to=${BASH_REMATCH[3]}
else
echo bad range
fi;shift
array=( ${@} )
local start=${array[@]::${from}}
local rest
[ -n "$to" ] && rest=${array[@]:((${to}+1))} || rest=${array[@]:((${from}+1))}
echo ${start[@]} ${rest[@]}
}
q=( `remove 1 ${q[*]}` )
echo ${q[@]}
~
~
Это заставило меня задуматься. Проблема с sed / awk / tail в том, что они построчно. После удаления первой строки вы должны записать каждую вторую строку из пространства шаблонов в файл.
Удалите первую строку, поскольку она выгружает ее обратно в файл.
readarray -t aLargeFile <<(cat largefile)
echo "$ {aLargeFile [@]: 1}"> largefile
Просто измените большой файл
к имени вашего файла.
Чтобы удалить элемент по определенному индексу, мы можем использовать unset
, а затем скопировать его в другой массив. Только unset
в данном случае не требуется. Поскольку unset
не удаляет элемент, он просто устанавливает нулевую строку для определенного индекса в массиве.
declare -a arr=('aa' 'bb' 'cc' 'dd' 'ee')
unset 'arr[1]'
declare -a arr2=()
i=0
for element in ${arr[@]}
do
arr2[$i]=$element
((++i))
done
echo ${arr[@]}
echo "1st val is ${arr[1]}, 2nd val is ${arr[2]}"
echo ${arr2[@]}
echo "1st val is ${arr2[1]}, 2nd val is ${arr2[2]}"
Выход
aa cc dd ee
1st val is, 2nd val is cc
aa cc dd ee
1st val is cc, 2nd val is dd
zsh
чьи массивы не являются разреженными вопреки ksh или удару. – Stéphane Chazelas 18.03.2013, 15:05shift
? – don_crissti 08.09.2016, 12:53array=("${array[@]: -3}")
иset -- "${@: -3}"
. Так упорно продолженный индексы. – manatwork 08.09.2016, 13:16shift $[$#-3]
поскольку последние 3, вероятно, намного быстрее для$@
– Tino 11.12.2016, 12:21