Bash getopts принимает больше позиционных параметров после первого аргумента

La parte de "firmware" del informe systemd-analyzemuestra el tiempo empleado en inicializar EFI , es decir, el tiempo transcurrido entre el instante en que encendió la alimentación (o el el sistema se reinició )y el instante en que su cargador de arranque comenzó a ejecutarse. Si desea disminuir eso, deberá investigar las opciones de configuración de su placa base.

1
23.06.2019, 18:35
1 ответ

Если вы не хотите заключать аргументы в кавычки (самое простое и надежное решение ), то вы не можете использовать getopts, и вам придется что-то ломать вместе, например:

declare -A args
key=""
for arg; do
    case $arg in
        "-a") key=part_1 ;;
        "-b") key=part_2 ;;
        *)  [[ -n $key ]] || { echo "unexpected argument" >&2; exit 1; }
            args[$key]="${args[$key]}$arg "
            ;;
    esac
done
# turn the array keys into variables
for key in "${!args[@]}"; do declare "$key=${args[$key]% }"; done
echo "part 1 => $part_1"
echo "part 2 => $part_2"

С вашими требованиями вы также не можете использовать getopt. Предполагая, что у вас есть GNU getopt, посмотрите, что произойдет:

$ set --  -a asd qwe zxc -b dfg 213
$ getopt -o a:b: -- "$@"
 -a 'asd' -b 'dfg' -- 'qwe' 'zxc' '213'

В качестве аргумента опции принимается только первое слово после опции.

Повторяю, выберите легкий путь и убедитесь, что аргументы процитированы.

3
27.01.2020, 23:22

Теги

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