Как объединить строковые переменные в Bash - PullRequest
2481 голосов
/ 15 ноября 2010

В PHP строки объединяются следующим образом:

$foo = "Hello";
$foo .= " World";

Здесь $foo становится "Hello World".

Как это достигается в Bash?

Ответы [ 30 ]

19 голосов
/ 18 марта 2013

Еще один подход ...

> H="Hello "
> U="$H""universe."
> echo $U
Hello universe.

... и еще один подход.

> H="Hello "
> U=$H"universe."
> echo $U
Hello universe.
15 голосов
/ 15 ноября 2010

Вы можете объединить без кавычек.Вот пример:

$Variable1 Open
$Variable2 Systems
$Variable3 $Variable1$Variable2
$echo $Variable3

Этот последний оператор будет выводить «OpenSystems» (без кавычек).

Это пример сценария Bash:

v1=hello
v2=world
v3="$v1       $v2"
echo $v3            # Output: hello world
echo "$v3"          # Output: hello       world
15 голосов
/ 21 декабря 2016

Самый простой способ с кавычками:

B=Bar
b=bar
var="$B""$b""a"
echo "Hello ""$var"
14 голосов
/ 04 ноября 2014

Даже если теперь разрешен оператор + =, он был введен в Bash 3.1 в 2004 году.

Любой сценарий, использующий этот оператор в более старых версиях Bash, завершится с ошибкой командой "not found "ошибка, если вам повезет, или" ошибка синтаксиса рядом с неожиданным токеном ".

Для тех, кому небезразлична обратная совместимость, используйте более старые стандартные методы конкатенации Bash, такие как упомянутые в выбранном ответе:

foo="Hello"
foo="$foo World"
echo $foo
> Hello World
13 голосов
/ 14 июня 2017

Я предпочитаю использовать фигурные скобки ${} для расширения переменной в строке:

foo="Hello"
foo="${foo} World"
echo $foo
> Hello World

фигурные скобки подойдут для непрерывного использования строки:

foo="Hello"
foo="${foo}World"
echo $foo
> HelloWorld

В противном случае использование foo = "$fooWorld" не будет работать.

8 голосов
/ 04 апреля 2012

Если вы пытаетесь разбить строку на несколько строк, вы можете использовать обратную косую черту:

$ a="hello\
> world"
$ echo $a
helloworld

С одним пробелом между ними:

$ a="hello \
> world"
$ echo $a
hello world

Этот также добавляет только один пробел между:

$ a="hello \
>      world"
$ echo $a
hello world
7 голосов
/ 28 октября 2015

В одном конкретном случае вам следует позаботиться:

user=daniel
cat > output.file << EOF
"$user"san
EOF

Выводит "daniel"san, а не danielsan, как вы, возможно, хотели. В этом случае вы должны сделать вместо:

user=daniel
cat > output.file << EOF
${user}san
EOF
7 голосов
/ 27 февраля 2014

Безопасный путь:

a="AAAAAAAAAAAA"
b="BBBBBBBBBBBB"
c="CCCCCCCCCCCC"
d="DD DD"
s="${a}${b}${c}${d}"
echo "$s"
AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDD DD

Строки, содержащие пробелы, могут стать частью команды, используйте «$ XXX» и «$ {XXX}», чтобы избежать этих ошибок.

Плюс посмотрите на другой ответ о + =

5 голосов
/ 24 апреля 2015

Если это пример добавления " World" к исходной строке, то это может быть:

#!/bin/bash

foo="Hello"
foo=$foo" World"
echo $foo

Выход:

Hello World
5 голосов
/ 07 февраля 2017
var1='hello'
var2='world'
var3=$var1" "$var2 
echo $var3
...