Я пытаюсь написать скрипт для pfSense, который основан на FreeBSD. Единственная оставшаяся часть, которая доставляет мне неприятности - это условие с регулярным выражением. Упрощенный код такой:
RESPONSE='{"port":98989}'
REG='{"port":([0-9]*)}'
if [[ $RESPONSE =~ $REG ]]; then
PORT=${BASH_REMATCH[1]}
fi
При включенном режиме трассировки возвращается следующая ошибка:
+ RESPONSE='{"port":98989}'
+ REG='{"port":([0-9]*)}'
+ '[[' '{"port":98989}' '=~' '{"port":([0-9]*)}' ]]
./pia-port-v2: [[: not found
Я не понимаю, почему [[
находится между одинарными кавычками в трассировке, и, вероятно, поэтому возникает ошибка "not found".
Обновление
Вероятно, это связано с тем, что FreeBSD pfSense не поддерживает bash, и эти инструкции предназначены только для bash. Я нашел это после того, как написал этот вопрос и попытался найти ответ.
У кого-нибудь есть альтернатива оболочке Борна? Цель состоит в том, чтобы вернуть номер порта, если выражение совпадает.
Я новичок в написании сценариев в Unix, таких как ОС.
В то же время я смотрю на grep, но, похоже, он применяет регулярные выражения только к вводу файлов.