it-swarm-pt.tech

Como concatenar uma variável do Shell para outros outros parâmetros nas minhas linhas de comando?

Como concatenar uma variável do Shell para outros outros parâmetros nas 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

16
aneuryzm

Usar ${ } para incluir uma variável.

Sem colchetes:

VAR="foo"
echo $VAR
echo $VARbar

daria

foo

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

Com colchetes:

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

daria

foo
foobar

Incluindo 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.

26
wag

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 Também teria funcionado. Eles são necessários para expansões de variáveis ​​quando o valor da variável pode conter alguns caracteres especiais do Shell (espaço em branco e \[?*). Eu recomendo colocar aspas duplas em 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 .

4

Eu costumo usar aspas, por exemplo echo "$WEBSITE.sql".

Então você pode escrever como:

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