У меня есть функция bash, с которой я пытаюсь использовать getopts, и у меня возникли некоторые проблемы.
Функция предназначена для вызова сама по себе (getch
), с необязательным флагом -s
(getch -s
) или с необязательным строковым аргументом после этого (так что getch master
и getch -s master
оба действительны ).
Ниже приведен фрагмент моей проблемы - это не вся функция, а то, на чем я сосредоточен:
getch()
{
if [ "$#" -gt 2 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
echo "Usage: $0 [-s] [branch-name]" >&2
return 1
fi
while getopts "s" opt; do
echo $opt # This line is here to test how many times we go through the loop
case $opt in
s)
squash=true
shift
;;
*)
;;
esac
done
}
В случае getch -s master
происходит странность. Вышеуказанное должно выплевывать s
один раз, но вместо этого я получаю это:
[user@host:git-repositories/temp]$ getch -s master
s
s
[user@host:git-repositories/temp]$
Почему он анализирует -s
дважды?