Я могу сделать сопоставление с образцом имени файла в сценарии удара?
test
каталог со следующими файлами...
bob@bob-laptop:~/test$ ls
exclude exclude1 exclude2 include1 include2
Из командной строки, если я хочу исключить некоторые файлы, я могу сделать...
bob@bob-laptop:~/test$ echo !(exclude*)
include1 include2
но, если я поместил ту команду в сценарий (названный exclude
) ...
bob@bob-laptop:~/test$ cat exclude
echo !(exclude*)
когда я выполняю его, я получаю ошибку...
bob@bob-laptop:~/test$ ./exclude
./exclude: line 1: syntax error near unexpected token `('
./exclude: line 1: `echo !(exclude*)'
Я попробовал каждый (я думаю), изменение выхода из некоторых, всех или ни одного из специальных символов, и я все еще получаю ошибку.
Что я пропускаю здесь? Если бы я не могу сделать этого, кто-то пожалуйста объяснил бы почему?
Вам нужно поместить строку Шебанга вверху скрипта. Без строки shebang ядро не знает, что ваш скрипт должен выполняться с помощью bash. См. Сбой сценария оболочки: Синтаксическая ошибка: «(» неожиданно
Кроме того, синтаксис !(…)
не включен по умолчанию по историческим причинам (более ранние версии bash его не поддерживали) ). Вам необходимо установить опцию extglob
.
#!/bin/bash
shopt -s extglob
echo !(exclude*)