ls с подстановочными знаками и скобками работает в консоли, но не в скрипте

ls с подстановочными знаками и скобками работает в консоли, но не в скрипте

Команда:

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, работать не будет.

Связанный контент