Общий ответ
Я не могу воспроизвести вашу проблему. Я вижу две возможные причины:
Вы используете оболочку не-bash.
Проверьте это, добавив команду ps
в скрипт и посмотритена выходе. Если в выводе нет bash
, значит, вы запускаете что-то другое. Шебанг #! /bin/bash
в начале вашего скрипта помогает убедиться, что bash
используется, но не является гарантией. 101
У вас есть старая версия bash, которая не поддерживает ${i^}
(например, 13-летняя версия, предварительно установленная в Mac OS X) .
Вы можете проверить свою версию bash, используя bash --version
. ${i^}
была введена в bash 4.0, как можно прочитать здесь (поиск hh. There are new case-modifying word expansions
) или здесь .
В любом случае, вы можете использовать другую команду, которая должна работать во всех оболочках Posix.
Если у вас версия GNU sed
(проверьте с помощью sed --version
), эта команда может быть
getApiName() {
printf %s "$1" | sed -E 's/(^|-+)(.)/\U\2/g'
}
Специфичный для Nmp ответ
documentation Документация о npm-run-script
состояниях
Фактическая оболочка, в которой выполняется ваш скрипт, зависит от платформы. По умолчанию в Unix-подобных системах это команда / bin / sh, в Windows - cmd.exe. Фактическая оболочка, на которую ссылается / bin / sh, также зависит от системы. Начиная с npm@5.1.0 вы можете настроить оболочку с помощью конфигурации оболочки сценария.
Поэтому, чтобы решить вашу проблему, вам просто нужно настроить npm так, чтобы вместо нее использовалось bash
.
В качестве обходного пути вы также можете вызвать bash
прямо в вашем скрипте. Самый простой способ сделать это - вот документ:
bash -s -- "$@" <<"EOF"
# your original script here
EOF