ksh + удаляют число из строки

Прокомментируйте строку в/etc/apt/sources.list, который указывает на CD, который является, добавляет '#' символ в начале строки, так, чтобы это выглядело подобным:

# deb cdrom:[Debian GNU/Linux 6.0.4 _Squeeze_ - Official i386 CD Binary-1 20120128-12:53]/ squeeze main
2
23.06.2013, 14:03
2 ответа
IP=(192.9.200.1 192.9.200.2 192.9.200.3)
remove=192.9.200.2
new=()
for ip in "${IP[@]}"; do [[ $ip != $remove ]] && new+=($ip); done
echo "${new[*]}"
192.9.200.1 192.9.200.3

Или

for ((i=0; i<${#IP[@]}; i++)); do
    [[ ${IP[i]} == $remove ]] && unset IP[i]
done
echo "${IP[*]}"                                                                 
192.9.200.1 192.9.200.3
1
27.01.2020, 22:14

Это возможно, но так как они не хешируются, необходимо выполнить итерации по каждому элементу:

i=0
for item in "${IP[@]}"; do
    if [ "$item" = 192.9.200.2 ]; then
        unset IP["$i"]
        break # Remove this if the item could appear more than once
    fi
    let i++
done
1
27.01.2020, 22:14
  • 1
    Отдельное я переменная, используемая из-за определенного ksh версия? На данный момент я могу только проверить MirBSD Korn Shell, но там for item in "${!IP[@]}"; do if [ "${IP[item]}" = 192.9.200.2 ]; then unset IP[item]; fi ; done работы. –  manatwork 23.06.2013, 14:24
  • 2
    @manatwork я не полностью уверен как портативный "${!var[@]}" находится в более старых ksh вариантах, таким образом, я избежал его. –  Chris Down 23.06.2013, 14:57

Теги

Похожие вопросы