Como faço para negativamente padrão corresponder em um arquivo de script bash?

1

Se eu digitar rm main!(.tex|.pdf) em um terminal bash, ele excluirá todos os arquivos que começam com main , mas não terminará em .tex ou .pdf , limpando vários arquivos indesejados espalhados pelos tipógrafos LaTeX .

O script de shell a seguir, no entanto, não faz o que eu esperava quando colocado em um arquivo e, em seguida, executa

#!/bin/bash

rm main!(.tex|.pdf)

Um erro de sintaxe é relatado no token ( . O que da? Qual é a maneira canônica de fazer algo assim como parte de um script bash? Existe uma maneira mais elegante de fazer isso do que trazer find para suportar o problema?

    
por ymbirtt 04.05.2014 / 21:17

1 resposta

2

Se o padrão não funcionar quando executado a partir de um script, verifique se a opção extglob está definida para uso não interativo também.

Basta colocar

#!/usr/bin/env bash
shopt -s extglob

no topo do seu script depois do hashbang. Dessa forma, é fácil identificar. Veja também: Glob - Greg's Wiki

    
por 04.05.2014 / 21:24

Tags