Como posso concatenar uma variável de shell para outros outros parâmetros em minhas linhas de comando?

14

Como posso concatenar uma variável shell para outros outros parâmetros em minhas linhas de comando?

Por exemplo,

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql

Eu preciso concatenar .sql para $WEBSITE

    
por aneuryzm 04.01.2011 / 11:09

3 respostas

22

Use ${ } para anexar uma variável.

Sem chaves:

VAR="foo"
echo $VAR
echo $VARbar

daria

foo

e nada, porque a variável $VARbar não existe.

Com chaves:

VAR="foo"
echo ${VAR}
echo ${VAR}bar

daria

foo
foobar

Colocar o primeiro $VAR não é necessário, mas uma boa prática.

Para o seu exemplo:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql

Isso funciona para bash , zsh , ksh , talvez outros também.

    
por 04.01.2011 / 12:50
4

Basta concatenar o conteúdo da variável para o que mais você deseja concatenar, por exemplo,

/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"

As aspas duplas não estão relacionadas à concatenação: aqui >$WEBSITE.sql teria funcionado também. Eles são necessários em torno de expansões variáveis quando o valor da variável pode conter alguns caracteres especiais do shell (espaço em branco e \[?* ). Eu recomendo strongmente colocar aspas duplas em torno de todas as expansões de variáveis e substituições de comandos, ou seja, sempre escreva "$WEBSITE" e "$(mycommand)" .

Para mais detalhes, consulte $ VAR vs $ {VAR} e para citar ou não citar .

    
por 04.01.2011 / 21:13
2

Eu geralmente uso citações, por exemplo echo "$WEBSITE.sql" .

Você pode escrever assim:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
    
por 04.01.2011 / 11:39