Я только что протестировал следующий синтаксис в Linux:
case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac
который работает без каких-либо проблем (см.: Могут ли операторы case в bash каскадироваться? ) с GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
.
Но на OSX у меня есть следующие ошибки:
-bash: syntax error near unexpected token `&'
-bash: syntax error near unexpected token `;'
Это GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
.
Любые подсказки, как добиться такого же провального поведения на bash v3?
Либо обновите свой bash ( доморощенный ), либо вам придется перекодировать его, используя серию операторов if:
case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac
было бы
# first case
if [[ $OSTYPE == linux-gnu* ]]; then
: # nothing in this branch
fi
if [[ $OSTYPE == linux* ]]; then
echo $OSTYPE
fi
# second case
function print_ostype { echo $OSTYPE; }
if [[ $OSTYPE == linux-gnu* ]]; then
# nothing in this branch
# include the next branch
print_ostype
elif [[ $OSTYPE == linux* ]]; then
print_ostype
fi
Я использовал функцию во втором случае, чтобы уменьшить дублирование кода, если есть несколько операторов.
:
для пустой ветки... чистая # ...
ошибка бросков;)
без холма
Кенорб