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

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

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

这是如何在Bash中实现的?


当前回答

这里是对大多数答案的简要总结。

假设我们有两个变量,$1设置为“1”:

set one two
a=hello
b=world

下表说明了我们可以组合a和b的值来创建新变量c的不同上下文。

Context                               | Expression            | Result (value of c)
--------------------------------------+-----------------------+---------------------
Two variables                         | c=$a$b                | helloworld
A variable and a literal              | c=${a}_world          | hello_world
A variable and a literal              | c=$1world             | oneworld
A variable and a literal              | c=$a/world            | hello/world
A variable, a literal, with a space   | c=${a}" world"        | hello world
A more complex expression             | c="${a}_one|${b}_2"   | hello_one|world_2
Using += operator (Bash 3.1 or later) | c=$a; c+=$b           | helloworld
Append literal with +=                | c=$a; c+=" world"     | hello world

几点注意事项

将赋值的RHS括在双引号中通常是一种很好的做法,尽管在许多情况下它是可选的+如果以小增量构造大字符串,特别是在循环中,则从性能角度来看,=更好在变量名周围使用{}来消除扩展的歧义(如上表第2行所示)。如第3行和第4行所示,不需要{},除非变量与一个字符串连接,该字符串以shell变量名中有效的第一个字符(即字母或下划线)开头。


另请参见:

BashFAQ/013-如何连接两个变量?我们什么时候需要在外壳变量周围使用大括号?

其他回答

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

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

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

我想从列表中创建一个字符串。找不到答案,所以我把它贴在这里。以下是我所做的:

list=(1 2 3 4 5)
string=''

for elm in "${list[@]}"; do
    string="${string} ${elm}"
done

echo ${string}

然后得到以下输出:

1 2 3 4 5

我在方便的时候这样做:使用内联命令!

echo "The current time is `date`"
echo "Current User: `echo $USER`"

有一种特殊情况需要注意:

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

将输出“daniel”san,而不是danielsan,正如您可能希望的那样。在这种情况下,您应该改为:

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

这里是对大多数答案的简要总结。

假设我们有两个变量,$1设置为“1”:

set one two
a=hello
b=world

下表说明了我们可以组合a和b的值来创建新变量c的不同上下文。

Context                               | Expression            | Result (value of c)
--------------------------------------+-----------------------+---------------------
Two variables                         | c=$a$b                | helloworld
A variable and a literal              | c=${a}_world          | hello_world
A variable and a literal              | c=$1world             | oneworld
A variable and a literal              | c=$a/world            | hello/world
A variable, a literal, with a space   | c=${a}" world"        | hello world
A more complex expression             | c="${a}_one|${b}_2"   | hello_one|world_2
Using += operator (Bash 3.1 or later) | c=$a; c+=$b           | helloworld
Append literal with +=                | c=$a; c+=" world"     | hello world

几点注意事项

将赋值的RHS括在双引号中通常是一种很好的做法,尽管在许多情况下它是可选的+如果以小增量构造大字符串,特别是在循环中,则从性能角度来看,=更好在变量名周围使用{}来消除扩展的歧义(如上表第2行所示)。如第3行和第4行所示,不需要{},除非变量与一个字符串连接,该字符串以shell变量名中有效的第一个字符(即字母或下划线)开头。


另请参见:

BashFAQ/013-如何连接两个变量?我们什么时候需要在外壳变量周围使用大括号?