jak połączyć zmienne łańcuchowe w jedną trzecią?

36

Muszę połączyć dwa ciągi w bash, aby:

string1=hello
string2=world

mystring=string1+string2

echo mystring powinien produkować

Witaj świecie

michelemarcon
źródło
Polecenie terminalu joinmoże również zrobić to za Ciebie.
Léo Léopold Hertz 준영

Odpowiedzi:

38

po prostu połącz zmienne:

mystring="$string1$string2"
SiegeX
źródło
51

Nie musisz używać {}, chyba że zamierzasz użyć parametrów zmiennych bash lub natychmiast dołączyć znak, który byłby prawidłowy jako część identyfikatora. Nie musisz także używać podwójnych cudzysłowów, chyba że parametry będą zawierać znaki specjalne.

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
źródło
2
Właśnie tego szukałem [z = "$ xi $ y" # nie działa ..... z = "$ {x} i $ y" # działa, "fooandbar"]. Dzięki.
bezczelny
18

Jeśli potrzebujesz połączyć zmienne z literałami:

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

echo $mystring będzie produkować:

cześć, dowolny tekst świata

phunehehe
źródło
6
Możesz użyć ${var}formatu w dowolnym momencie, ale potrzebujesz go tylko wtedy, gdy $varzaraz po nim $vararbitarypojawi się inny prawidłowy znak o zmiennej nazwie ... np .: zinterpretuje zmienną o nazwie „vararbitary”, ale możesz ją obejść, używając ${var}arbitary.... ups, właśnie widziałem abshmera Khamera .. ale równie dobrze mogę zostawić komentarz tutaj.
Peter.O
11

Jeśli chcesz połączyć wiele zmiennych, możesz także użyć +=do dodania ciągów .. Może to zwiększyć czytelność ..

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

Jak wspomniano w innych odpowiedziach, {} nie są tutaj potrzebne, ale osobiście zawsze używam ich, aby uniknąć błędów składniowych.

+=mogą być również wykorzystywane do dołączania wartości do tablic: array+=($b).

mariux
źródło