як об'єднати струнні змінні в третину?


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"]. Спасибі.
цвіте

18

Якщо вам потрібно об'єднати змінні з буквальними рядками:

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

echo $mystring буде виробляти:

якийсь привіт довільний світовий текст


6
Ви можете використовувати ${var}формат у будь-який час, але вам він потрібен лише тоді, коли $varза ним слід негайно слідувати інший дійсний символ змінної імені ... наприклад: $vararbitaryінтерпретувати змінну під назвою "vararbitary", але ви можете її обійти за допомогою ${var}arbitary.... ой, я щойно побачив абсервацію Хамера .. але я також можу залишити коментар тут.
Пітер.О

11

Якщо ви хочете об'єднати багато змінних, ви також можете використовувати +=для додавання рядків. Це може збільшити читабельність ..

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

Як згадується в інших відповідях, {} тут не потрібні, але я особисто завжди їх використовую, щоб уникнути помилок синтаксису.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.