como concatenar variáveis ​​de string em um terceiro?

36

Preciso concatenar duas strings no bash, para que:

string1=hello
string2=world

mystring=string1+string2

echo mystring deve produzir

Olá Mundo

michelemarcon
fonte
Comando de terminal jointambém pode fazer a coisa por você.
Léo Léopold Hertz 준영

Respostas:

38

simplesmente concatene as variáveis:

mystring="$string1$string2"
SiegeX
fonte
51

Você não precisa usar {}, a menos que use parâmetros da variável bash ou adicione imediatamente um caractere que seria válido como parte do identificador. Você também não precisa usar aspas duplas, a menos que os parâmetros incluam caracteres especiais.

x=foo
y=bar
z=$x$y        # $z is now "foobar"
z="$x$y"      # $z is still "foobar"
z="$xand$y"   # does not work
z="${x}and$y" # does work, "fooandbar"
z="$x and $y" # does work, "foo and bar"
Khamer
fonte
2
Era isso que eu estava procurando [z = "$ xand $ y" # não funciona ..... z = "$ {x} e $ y" # funcionam, "fooandbar"]. Obrigado.
19317 blokeish
18

Caso você precise concatenar variáveis ​​com cadeias literais:

string1=hello
string2=world
mystring="some ${string1} arbitrary ${string2} text"

echo $mystring vai produzir:

Olá, texto arbitrário do mundo

phunehehe
fonte
6
Você pode usar o ${var}formato a qualquer momento, mas só precisa dele quando $varfor imediatamente seguido por outro caractere válido de nome de variável ... por exemplo: $vararbitaryinterpretará uma variável chamada "vararbitary", mas poderá contorná-la usando ${var}arbitary.... opa, eu acabei de ver a resposta de khamer .. mas também posso deixar o comentário aqui.
Peter.O
11

Se você deseja concatenar muitas variáveis, também pode usar +=para anexar strings. Isso pode aumentar a legibilidade.

mystring=${string1}
mystring+=${string2}
mystring+=${string3}
mystring+=${string4}
echo ${mystring}

Conforme mencionado por outras respostas, os {} não são necessários aqui, mas eu sempre os uso pessoalmente para evitar alguns erros de sintaxe.

+=também pode ser usado para acrescentar valores para matrizes: array+=($b).

mariux
fonte