¿Cómo concatenar variables de cadena en un tercero?

36

Necesito concatenar dos cadenas en bash, para que:

string1=hello
string2=world

mystring=string1+string2

echo mystring debería producir

Hola Mundo

michelemarcon
fuente
El comando de terminal jointambién podría hacer lo mismo por usted.
Léo Léopold Hertz 준영

Respuestas:

38

simplemente concatene las variables:

mystring="$string1$string2"
SiegeX
fuente
51

No necesita usar {} a menos que vaya a usar parámetros de variables bash o añada inmediatamente un carácter que sea válido como parte del identificador. Tampoco necesita usar comillas dobles a menos que sus parámetros incluyan caracteres especiales.

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
fuente
2
Esto es lo que estaba buscando [z = "$ xand $ y" # no funciona ..... z = "$ {x} y $ y" # funciona, "fooandbar"]. Gracias.
Blokeish
18

En caso de que necesite concatenar variables con cadenas literales:

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

echo $mystring Producirá:

un texto hola mundo arbitrario

phunehehe
fuente
66
Puede usar el ${var}formato cuando lo desee, pero solo lo necesita cuando $varva a ser seguido inmediatamente por otro carácter válido de nombre de variable ... por ejemplo: $vararbitaryinterpretará una variable llamada "vararbitaria", pero puede evitarla usando ${var}arbitary.... uy, acabo de ver la respuesta de Khamer ... pero también puedo dejar el comentario aquí.
Peter.O
11

Si desea concatenar muchas variables, también puede usarlas +=para agregar cadenas. Esto puede aumentar la legibilidad.

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

Como se menciona en otras respuestas, las {} no son necesarias aquí, pero personalmente siempre las uso para evitar algunos errores de sintaxis.

+=también se puede utilizar para añadir valores a arrays: array+=($b).

mariux
fuente