Специальные символы:$@ and--) и *) в getopt bash

vim  mytest.sh
  1 #!/bin/bash
  2 
  3 ARGS=`getopt -o ab: -l "argv3:,help" -- "$@"`
  4 eval set -- "${ARGS}"
  5 
  6 while true;
  7 do
  8     case "$1" in
  9         -a)
 10             echo "i am a"
 11             shift
 12             ;;
 13         -b)
 14             echo "i am b, my value is $2"
 15             shift 2
 16             ;;
 17         --argv3)
 18             echo "i am argv3, my value is $2"
 19             shift 2
 20             ;;
 21         --help)
 22             echo "i am help info"
 23             exit 0
 24             ;;
 25         --)
 26             shift
 27             break
 28             ;;
 29         *)
 30             echo "Internal error!"
 31             exit 1
 32             ;;
 33     esac
 34 done
  1. "$@" расширяется в список отдельных параметров. Что значит -- "$@" значит в гетопт? Если я изменю 3-ю строку на

    ARGS=`getopt -o ab: -l "argv3:,help"`
    

какая функция исчезнет для test.sh?

  1. --) в 25-й строке

     25         --)
     26             shift
     27             break
     28             ;;
    

    Какой смысл хочет выразить кодер?

  2. *) в 29-й строке

    При каком условии или по какому аргументу будет выводиться "Внутренняя ошибка!" в терминале?

1 ответ

  1. Просто соответствует параметру, содержащему два знака минус, --,

Редактировать: как упоминалось @axiac, этот параметр обычно имеет особое значение, он обозначает конец параметров команды.

  1. Соответствует параметру выше.

  2. Подстановочный знак, можно рассматривать как default в switch-case, который будет срабатывать, пока ни один из случаев не совпадает с предыдущим.

Другие вопросы по тегам