Как получить bash-индексы массива параметров?

Сейчас проблема заключается в том, что ваша Ubuntu установлена ​​с поддержкой BIOS, а поскольку Windows 8 использует поддержку EFI, вам нужно сделать их одинаковыми, чтобы использовать их в двойной загрузке.

Это официальный сайт Ubuntu. документация по UEFI

В основном вам нужно сделать следующее:

  • Включить режим загрузки «только UEFI» в настройках BIOS.
  • Используйте образ UEFI Ubuntu на вашем liveUSB.
  • Выполните обычную установку, как показано в руководстве.
  • Посмотрите, указаны ли другие ОС при установке в grub.

0
29.01.2019, 19:36
4 ответа

Вы можете вычислить из количества аргументов:

seq ${#@}
1
28.01.2020, 02:26

Вам не нужен фиктивный массив. Вы можете использовать переменную счетчика:

indexof() {
    search="$1"; shift
    i=0
    for arg; do
        [ "$search" = "$arg" ] && return $i
        ((i++))
    done
    return -1
}

Обратите внимание, что для arg; do по умолчанию использует "$ @" , поэтому в "$ @" можно опустить.

1
28.01.2020, 02:26

Вместо этого можно использовать форму 'arithmetic-for':

indexof(){ search=$1; shift 
    for(( i=1; i<=$#; i++ )); do [[ $search == ${!i} ]] && return $i; done
    return -1 # as an old LISPer I'd prefer 0 for the notfound case
}

Не особенно лучше (IMO), но отличается.

0
28.01.2020, 02:26

Для записи, в zshфункциональность indexOf соответствует:

$ set foo bar baz bar foo
$ echo $@[(i)bar] $@[(I)bar]
2 4

($2— это первое совпадение (с использованием iфлага нижнего индекса ), $4последнее совпадение(Iфлаг нижнего индекса )).

1
28.01.2020, 02:26

Теги

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