在PHP中,字符串按如下方式连接在一起:

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

在这里,$foo变成了“Hello World”。

这是如何在Bash中实现的?


当前回答

默认情况下,Bash中的变量和数组(索引或关联*)始终是字符串,但可以在声明内置函数中使用标志,为它们提供“integer”(-i)或“reference”**(-n)等属性,从而改变它们的行为方式。

Bash算术接受ASCII/字符串数字作为输入,因此实际使用integer属性的原因很少。

此外,变量值不能包含ASCII NULL(即8位零),因为通常使用以空结尾的C字符串来实现它们。

*即一个或多个键+值对。**参考变量扩展为另一个变量的值,其标签被分配给参考变量

附加字符串:

$ foo=Hello
$ foo+=' world!'
$ echo "$foo"

Hello world!

$ num=3
$ num+=4
echo "$num"

34 # Appended string (not a sum)

使用整数属性的原因之一是它改变了+=赋值运算符的行为:

$ declare -i num=3
$ num+=4
echo "$num"

7 # Sum

请注意,这不适用于-=、/=等,除非在算术((())和$(()()))中执行,在算术中,使用或不使用整数属性时,数字已被视为相同。有关这些运算符的完整列表,请参见manbash的“算术求值”一节,这些运算符与C相同。

+=赋值运算符也可用于将新元素附加到索引数组(AKA“列表”):

$ foo=(one)
$ foo+=(two)
$ printf 'Separate element: %s\n' "${foo[@]}"

Separate element: one
Separate element: two

另一种常见的方法是使用计数器:

$ foo[c++]=one
$ foo[c++]=two

POSIX shell不使用+=赋值运算符来附加字符串,因此必须这样做:

$ foo=Hello
$ foo="$foo world!"
$ echo "$foo"

Hello world!

这在Bash中也很好,因此它可以被认为是一种更可移植的语法。

其他回答

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

通常,要连接两个变量,只需将它们一个接一个地写入即可:

a='Hello'
b='World'
c="${a} ${b}"
echo "${c}"
> Hello World

您可以在没有引号的情况下进行连接。下面是一个示例:

$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
var1='hello'
var2='world'
var3=$var1" "$var2 
echo $var3

如果您要做的是将字符串拆分为多行,则可以使用反斜杠:

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

中间有一个空格:

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

此选项还只在两者之间添加一个空格:

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

请注意,这不会起作用

foo=HELLO
bar=WORLD
foobar=PREFIX_$foo_$bar

因为它似乎掉了$foo,给你留下了:

前缀_世界

但这将起作用:

foobar=PREFIX_"$foo"_"$bar"

并为您提供正确的输出:

前缀HELLO_WORLD