Добавление опции справки для функции

Использование GNUsed:

sed 's/,/<COMMA>/2g' infile

Или портативность:

sed 's/,/<COMMA>/g; s/<COMMA>/,/' infile
1
29.06.2021, 06:08
1 ответ

Вы можете сделать это вручную, но использование getoptбудет полезнее в дальнейшем. Рассмотрим, например,:

#!/bin/bash

# Prints first set of lines from named files.
# $1 NUM  Number of lines to print
# $2 DIR  Directory
headrc() {
    eval set -- $(getopt --name "${FUNCNAME[0]}" --options h --longoptions help -- "${@}")

    while [[ "${1}" != "--" ]]; do
        case "${1}" in
        -h | --help)
            printf "Usage: ${FUNCNAME[0]} [-h|--help] <args>\n"
            return 1
            ;;
        *)
            printf "Unknown option: ${1}\n"
            ;;
        esac

        shift # Shift off option
    done
    shift # Shift off --

    local -r num="${1}"
    local -r dir="${2}"

    find "${dir}" \( -name \*.org -o -name \*.texi \) | xargs head -n "${num}";
}

Инструмент getoptберет существующие аргументы(${@})и параметры, которые вы ему задали, и переупорядочивает их таким образом, что сначала идут все параметры, затем --и все остальное. Параметр --optionsопределяет односимвольные -опции, а --longoptionsуказывает «длинные» (многосимвольные -опции ).

Например:

$ getopt --options fh --longoptions file,help -- a b c -f d e --help g
 -f --help -- 'a' 'b' 'c' 'd' 'e' 'g'

Обратите внимание, что getoptподдерживает опции с параметрами, но, поскольку вам это здесь не нужно, я не рассматривал этот аспект инструмента.

eval set --обновляет аргументы до заданных значений, перезаписывая то, что функция видит в качестве своих аргументов, в вывод getopt.

Цикл whileобрабатывает опции; опции останавливаются, когда встречается --. Если см. -hили --help, он печатает справочное сообщение и возвращается. Каждый раз, когда он обрабатывает цикл, он использует shift, чтобы «сдвинуть» первый аргумент.

Как только он находит --, он останавливает цикл и отключает этот аргумент.

Теперь у вас осталось все, что было после опций, так что вы можете использовать позиционные аргументы, как и раньше.

2
28.07.2021, 11:21

Теги

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