Concatenação de string Bash, não expande o curinga

3

Histórico:

Eu tenho um script que usa um nome de arquivo como parâmetro, por exemplo "mydb.sql". Meu script importa esse banco de dados e "limpa" (remove dados identificáveis pelo usuário, etc), exporta e cria uma versão "lite" (retira todos os dados não essenciais, deixando apenas o usuário admin principal, removendo todos os votos, etc) . Estes são gerados em mydb.clean.sql e mydb.lite.sql. Este script é executado em várias pastas.

Eu quero criar um padrão curinga para passar para find . Originalmente, codifiquei '*.sql' , que retornou o original, clean e lite (eles foram passados para du para fornecer um resumo do tamanho do arquivo).

Agora eu alterei meu script para pegar um parâmetro; o nome do arquivo. Isso me permite executá-lo em um único arquivo.

A questão

Então, como obtenho o padrão? Eu tenho isso:

FNAME=$(basename "$1");
FNAME="${FNAME%.*}*.sql"
echo $FNAME

Isso converte FNAME de /home/user/backups/sitea/mydb.sql para mydb . Eu então quero que FNAME seja a string 'mydb*.sql' , no entanto o bash está expandindo esse * out então eu acabo com FNAME as 'mydb.sql mydb.clean.sql mydb.lite.sql' (assumindo que ele as encontrou no CWD).

Eu tenho tentativas de fazer backslashing no * , mas acabo com 'mydb\*.sql' , o que não funciona. Eu tentei usar aspas simples, mas o bash não expande a parte ${FNAME%.*} .

Alguma opinião?

Atualizar

Isso ilustra melhor o problema ...

[user@server temp]$ T="${FNAME}\*.sql"; echo $T
mydb\*.sql

[user@server temp]$ T="${FNAME}*.sql"; echo $T
mydb.clean.sql mydb.lite.sql mydb.sql

[user@server temp]$ T='${FNAME}*.sql'; echo $T
${FNAME}*.sql
    
por Nick 16.07.2012 / 15:09

1 resposta

4

Está sendo expandido na última etapa.

echo "$FNAME"
    
por 16.07.2012 / 15:26