Для сопоставления шаблонов glob в операторе if, начинающихся с - (тире)

Для сопоставления шаблонов glob в операторе if, начинающихся с - (тире)

Я не могу сопоставить "--debug" в операторе if.
Я нацеливаюсь на скрипт, совместимый с POSIX.

CHANNELS=;
set -- stable beta dev master --debug

echo "DEBUG: Before while $@";
while [ $# -gt 0  ]; do
  echo "DEBUG: Inside while $1";
  if [ ! $1 = -* ]; then
    echo "DEBUG: Inside if $1";
    CHANNELS="$CHANNELS $1";
  fi
  shift;
done
echo "DEBUG: After while $CHANNELS";

Фактический -> $CHANNELS имеет "stable beta dev master --debug"
Ожидаемый -> $CHANNELS должен иметь "stable beta dev master"

решение1

Сопоставление с образцом выполняется с помощью caseконструкции в оболочках POSIX:

CHANNELS=
set -- stable beta dev master --debug

echo "DEBUG: Before while $@";
while [ "$#" -gt 0  ]; do
  echo "DEBUG: Inside while $1";
  case $1 in
    (-*) ;;
    (*)
      echo "DEBUG: Inside case (*)"
      CHANNELS="$CHANNELS $1";;
  esac
  shift
done
echo "DEBUG: After while $CHANNELS";

Связанный контент