Команда:
ls /etc/pve/lxc/*([0-9]).conf
Работа в консоли:
- Результат: файл найден!
/etc/pve/lxc/107.conf
но не в сценарии:
- #!/bin/баш
- Результат: ОШИБКА
syntax error near unexpected token `('
ls /etc/pve/lxc/*([0-9]).conf
Затем я замаскировал скобки в скрипте.:
ls /etc/pve/lxc/*\([0-9]\).conf
- Результат: Файл не найден
ls: cannot access '/etc/pve/lxc/*([0-9]).conf': No such file or directory
решение1
Выражение *([0-9]).conf
в стиле KSHрасширенный шар. Эта функция включена по умолчанию для интерактивных оболочек bash, но для ее использования в скрипте bash ее необходимо включить явно с помощью
shopt -s extglob
Смотрите такжеРасширение подстановочных знаков, которое работает в командной строке, но не в скрипте bash
решение2
Информация, которую вы не предоставляете, это то, какой интерпретатор команд используется в скрипте. Это указано в shebang, т.е. в первой строке (например. #/bin/sh
).
В Ubuntu консоль по умолчанию запускает bash как интерактивную оболочку. Если ваш скрипт использует другой интерпретатор команд, например /bin/sh, синтаксис, специфичный для bash, работать не будет.