getopts для анализа как длинных, так и коротких опций

Справа

amixer sget Master | grep 'Right:' | awk -F'[][]' '{ print $2 }'
85%

Левый

amixer sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%

Звуковой сервер

Если вы не используете pulseaudio по умолчанию, вы можете указать amixer, какой сервер использовать с-D pulse

amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%
0
12.12.2019, 15:55
1 ответ

Это просто, но документация есть только на справочной странице getopt()от Solaris и в документации getoptsот bosh:

.

http://schilytools.sourceforge.net/man/man1/bosh.1.html

прокрутите вниз до страницы 47 в версии от декабря 2019 года.

Позвольте мне отредактировать ваш пример:

while getopts ":t:(test)c:(call)" name; do   
    case $name in
    t) first=$OPTARG;;
    c) second=$OPTARG;;
    :) echo "Missing argument for -$OPTARG"; break;;
    *) echo 'Invalid option'; break;;   
    esac
done
shift $((OPTIND-1))

Обратите внимание, что вам может понадобиться заключить в кавычки аргументы, содержащие круглые скобки....

Принимает -cи --call.

Обратите внимание, что это работает только с

  • bosh, улучшенная оболочка Bourne Shell, поддерживающая POSIX, от schilytools для любой ОС
  • sh, старый Bourne Shell на Solaris 10
  • ksh93 на любой ОС

boshкроме того, также поддерживает длинные параметры в стиле UNIX -long, если optstringначинается с ().

И ksh93, и boshдополнительно поддерживают параметры, начинающиеся с +, если optstringначинается с +. В таком случае $nameсодержит +cвместо c, если программа была вызвана с +c.

BTW :Только boshподдерживает способ поддержки длинных опций, у которых нет соседней короткой опции. См. справочную страницу bosh.

Я автор schilytools.

-3
28.01.2020, 02:38

Теги

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