как объединить строковые переменные в третью?


36

Мне нужно объединить две строки в Bash, чтобы:

string1=hello
string2=world

mystring=string1+string2

echo mystring должен производить

Привет, мир


Терминальная команда joinтакже может сделать это за вас.
Лео Леопольд Герц 준영

Ответы:



51

Вам не нужно использовать {}, если вы не собираетесь использовать параметры переменной bash или немедленно добавить символ, который будет действительным как часть идентификатора. Вам также не нужно использовать двойные кавычки, если ваши параметры не будут включать специальные символы.

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"

2
Это то, что я искал [z = "$ xand $ y" # не работает ..... z = "$ {x} и $ y" # работает, "fooandbar"]. Спасибо.
blokeish

18

Если вам нужно объединить переменные с литеральными строками:

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

echo $mystring будет производить:

какой-нибудь привет произвольный текст мира


6
Вы можете использовать ${var}формат в любое время, но вам он нужен только тогда, когда $varза ним сразу следует другой допустимый символ имени переменной ... например: $vararbitaryбудет интерпретировать переменную с именем "vararbitary", но вы можете обойти ее, используя ${var}arbitary.... упс, я только что видел абзер Хамера ... но я могу также оставить комментарий здесь.
Peter.O

11

Если вы хотите объединить много переменных, вы также можете использовать +=для добавления строк .. Это может повысить читабельность.

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

Как уже упоминалось в других ответах, {} здесь не нужны, но я лично всегда использую их, чтобы избежать некоторых синтаксических ошибок.

+=также может быть использован для добавления значения в массивы: array+=($b).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.