Проблема в том, что раскрытие фигурной скобки происходит до раскрытия переменной. Как поясняется вman bash
:
The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and pathname expansion.
Это означает, что когда у вас есть что-то вроде $var
, которое содержит {1..3}
, и выполняете echo "$var"
, оболочка ищет возможные раскрытия фигурных скобок перед расширением переменной до ее значения. Поскольку фигурные скобки находятся в переменной, это означает, что в этот момент оболочка не видит фигурных скобок, поэтому раскрытие скобок не выполняется.
Одним из обходных путей может быть eval
переменная, если она представляет собой диапазон. Добавьте эти строки перед циклом for
:
if [[ $RANGE =~ ^[0-9]+\.\.[0-9]+$ ]]; then
RANGE=$(eval echo {$RANGE})
fi
Теперь, в более общем плане, рекомендуется избегать использования имен переменных ЗАГЛАВНЫМИ БУКВАМИ в сценариях оболочки. Переменные среды обычно пишутся с заглавной буквы, и это может привести к путанице, если вы используете то же имя, что и определенная переменная среды. Поэтому используйте имена переменных в нижнем регистре, чтобы быть в безопасности.
Кроме того, эта программа очень утомительна при отладке и в равной степени утомительна в использовании. Не запрашивайте у пользователя ввод во время выполнения! Вместо этого измените свой сценарий и заставьте его принимать аргументы. Ввод значений сложный, раздражающий, подверженный ошибкам и не может быть автоматизирован.
Я не могу вспомнить, как сделать сопоставление пользователей в докере. Однако я бы просто использовал права доступа к файлам :, добавил новую группу(zigbee_device
)к хосту, установил разрешение на устройстве, чтобы пользователи в этой группе могли читать и писать. Затем запустите контейнер с ним как с одной из его групп.