在PHP中,字符串按如下方式连接在一起:
$foo = "Hello";
$foo .= " World";
在这里,$foo变成了“Hello World”。
这是如何在Bash中实现的?
在PHP中,字符串按如下方式连接在一起:
$foo = "Hello";
$foo .= " World";
在这里,$foo变成了“Hello World”。
这是如何在Bash中实现的?
当前回答
如果您要做的是将字符串拆分为多行,则可以使用反斜杠:
$ a="hello\
> world"
$ echo $a
helloworld
中间有一个空格:
$ a="hello \
> world"
$ echo $a
hello world
此选项还只在两者之间添加一个空格:
$ a="hello \
> world"
$ echo $a
hello world
其他回答
如果要附加下划线之类的内容,请使用转义符(\)
FILEPATH=/opt/myfile
这不起作用:
echo $FILEPATH_$DATEX
这很好:
echo $FILEPATH\\_$DATEX
默认情况下,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中也很好,因此它可以被认为是一种更可移植的语法。
我解决问题的方法是
$a$b
例如
a="Hello"
b=" World"
c=$a$b
echo "$c"
它产生
Hello World
例如,如果尝试将一个字符串与另一个字符串连接,
a="Hello"
c="$a World"
则echo“$c”将产生
Hello World
具有额外的空间。
$aWorld
不起作用,正如你所想象的,但是
${a}World
生产
HelloWorld
你也可以这样做:
$ var="myscript"
$ echo $var
myscript
$ var=${var}.sh
$ echo $var
myscript.sh
我想从列表中创建一个字符串。找不到答案,所以我把它贴在这里。以下是我所做的:
list=(1 2 3 4 5)
string=''
for elm in "${list[@]}"; do
string="${string} ${elm}"
done
echo ${string}
然后得到以下输出:
1 2 3 4 5