Я могу запустить эту команду из командной строки:
cp -r folder/!(exclude-me) ./
Чтобы рекурсивно скопировать все содержимое, folder
кроме подкаталога, названного exclude-me
в текущий каталог. Это работает точно так, как задумано. Тем не менее, мне нужно, чтобы это работало в скрипте bash, который я написал, где у меня есть это:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
Но когда я запускаю скрипт:
bash my-script.sh
Я получаю это:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
И я в растерянности относительно того, почему это работает из командной строки, но точно такая же строка не работает в скрипте bash.
bash
shell-script
nzifnab
источник
источник
env > file1
в скрипт и выполнить./it
, а затемenv > file2
иsource it
, в надежде, что я бы нашел разницу вenv
s, что не так. Как я могу программно перечислить все различия между двумя оболочками (в данном случае интерактивные и неинтерактивные)?Добавьте эту строку в верхней части вашего скрипта:
!(...)
это расширенная функция сопоставления с шаблоном, для ее использования вам нужноextglob
включить опцию. Смотрите Shopt Builtin для более подробной информации.источник