Não é possível concatenar 2 variáveis

1

Eu preciso concatenar duas variáveis string no bash em minha máquina Centos 6

for f in *.tar.gz;
do
basename ${f%.tar.gz}
echo $basename
dbaddress='mysql/*.sql'
path="${basename}${dbaddress}"  
echo $path
tar -zxvf $f $path
done

O script deve extrair todos os arquivos .sql dentro do diretório basename / mysql /. Mas a saída do meu código é a seguinte:

basename

mysql/*.sql
tar: mysql/*.sql: Not found in archive
tar: Exiting with failure status due to previous errors

Como você pode ver, o $ basename não é adicionado ao $ dbaddress. Estou faltando alguma coisa?

    
por KarenV 24.11.2015 / 20:06

3 respostas

2

Você está fazendo referência à variável basename (com $basename ), mas nunca a atribui a nada, o que significa que ela lê para bash como uma string nula. Você pode precisar tentar basename=${f%.tar.gz} .

    
por 24.11.2015 / 20:17
1

Você pode tentar isso para combinar duas variáveis:

var1="Hello"
var2="$var1 world!"

Mas no seu código, você não está declarando a variável basename !

    
por 24.11.2015 / 20:22
0

Experimente basename=${f%.tar.gz} .

Para depurar problemas como esse, coloque um set -x antes do loop em seu script e você verá o que cada comando está executando ( set +x para desativá-lo).

Você verá que está realmente executando o comando basename ${f%.tar.gz} , presumivelmente no arquivo basename.tar.gz , que apenas ecoa basename , mas não o salva em nenhuma variável. Então você echo $basename e a variável basename está vazia, e é por isso que você vê uma linha vazia na saída.

    
por 24.11.2015 / 20:24

Tags