Может ли флаг сценария оболочки иметь необязательные аргументы при разборе с помощью getopts? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть скрипт, который я хочу запустить тремя способами:

  1. Без флага - ./script.sh
  2. С флагом, но без параметра - ./script.sh -u
  3. С флагом, который принимает параметр - ./script.sh -u username

Есть ли способ сделать это?

После прочтения некоторых руководств (примеры здесь и здесь ) не представляется возможным, особенно если я хочу использовать getopts.

Могу ли я сделать это с getopts или мне нужно будет проанализировать мои варианты другим способом? Моя цель - продолжать использовать getopts, если смогу.

1 Ответ

0 голосов
/ 29 августа 2018

Пример не-getopts в BashFAQ # 35 может охватывать случай использования:

user_set=0  # 1 if any -u is given
user=       # set to specific string for -u, if provided
while :; do
  case $1 in
    -u=*) user_set=1; user=${1#*=} ;;
    -u)   user_set=1
          if [ -n "$2" ]; then
            user=$2
            shift
          fi ;;
    --)   shift; break ;;
    *)    break ;;
  esac
  shift
done
...