Я могу сделать сопоставление с образцом имени файла в сценарии удара?

Я могу сделать сопоставление с образцом имени файла в сценарии удара?

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*)'  

Я попробовал каждый (я думаю), изменение выхода из некоторых, всех или ни одного из специальных символов, и я все еще получаю ошибку.

Что я пропускаю здесь? Если бы я не могу сделать этого, кто-то пожалуйста объяснил бы почему?

3
задан 26 October 2012 в 03:50

1 ответ

Вам нужно поместить строку Шебанга вверху скрипта. Без строки shebang ядро ​​не знает, что ваш скрипт должен выполняться с помощью bash. См. Сбой сценария оболочки: Синтаксическая ошибка: «(» неожиданно

Кроме того, синтаксис !(…) не включен по умолчанию по историческим причинам (более ранние версии bash его не поддерживали) ). Вам необходимо установить опцию extglob.

#!/bin/bash
shopt -s extglob
echo !(exclude*)
0
ответ дан 26 October 2012 в 03:50

Другие вопросы по тегам:

Похожие вопросы: