php字符串嵌变量,如何连接Bash中的字符串变量

在PHP中,字符串串联在一起,如下所示:$foo = "Hello";

$foo .= " World";

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

这在Bash中如何完成?foo="Hello"

foo="$foo World"

echo $foo

> Hello World

一般来说,要连接两个变量,你可以一个接一个地写出它们:a='hello'

b='world'

c=$a$b

echo $c

> helloworld

Bash还支持+ =运算符,如下面的记录所示:$ A="X Y"

$ A+="Z"

$ echo "$A"

X YZ

首先打击

由于这个问题是专门针对Bash的,我的答案的第一部分将以不同的方式正确地做到这一点:

+= :追加到变量

语法+=可以以不同的方式使用:

附加到字符串var+=...

(因为我很节俭,我只会使用两个变量foo和a ,然后在整个答案中重复使用它们。;-)a=2

a+=4

echo $a

24

使用堆栈溢出问题语法,foo="Hello"

foo+=" World"

echo $foo

Hello World

工作正常!

追加到一个整数((var+=...))

变量a是一个字符串,也是一个整数echo $a

24

((a+=12))

echo $a

36

附加到数组var+=(...)

我们的a也是一个只有一个元素的数组。echo ${a[@]}

36

a+=(18)

echo ${a[@]}

36 18

echo ${a[0]}

36

echo ${a[1]}

18

请注意,在圆括号之间,有一个空格分隔的数组。 如果你想在你的数组中存储一个包含空格的字符串,你必须包含它们:a+=(one word "hello world!" )

bash: !": event not found

嗯..这不是一个错误,而是一个功能......为了防止bash试图发展!" ,你可以:a+=(one word "hello world"! 'hello world!' $'hello world 41')

declare -p a

declare -a a='([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!" [5]="h

ello world!" [6]="hello world!")'

printf :使用内建命令重新构造变量

printf内置命令提供了绘制字符串格式的强大方法。 由于这是一个Bash内建函数,因此可以选择将格式化字符串发送到变量而不是在stdout上进行打印:echo ${a[@]}

36 18 one word hello world! hello world! hello world!

这个数组中有七个字符串。 所以我们可以构建一个包含7个位置参数的格式化字符串:printf -v a "%s./.%s...'%s' '%s', '%s'=='%s'=='%s'" "${a[@]}"

echo $a

36./.18...'one' 'word', 'hello world!'=='hello world!'=='hello world!'

或者我们可以使用一个参数格式字符串,这将重复许多参数submited ...

请注意,我们的a仍然是一个数组! 只有第一个元素被改变了!declare -p a

declare -a a='([0]="36./.18...'''one''' '''word''', '''hello world!'''=='

''hello world!'''=='''hello world!'''" [1]="18" [2]="one" [3]="word" [4]="hel

lo world!" [5]="hello world!" [6]="hello world!")'

在bash下,当你访问一个变量名而不指定索引时,你总是只处理第一个元素!

所以要检索我们的七场数组,我们只需要重新设置1st元素:a=36

declare -p a

declare -a a='([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!" [5]="he

llo world!" [6]="hello world!")'

一个带有许多参数的参数格式字符串传递给:printf -v a[0] 'n' "${a[@]}"

echo "$a"

<36>

<18>

使用堆栈溢出问题语法:foo="Hello"

printf -v foo "%s World" $foo

echo $foo

Hello World

注意:使用双引号对于处理包含spaces , tabulations newlines和/或newlines字符串可能很有用printf -v foo "%s World" "$foo"

现在壳牌

在POSIX shell下,你不能使用bashisms,所以没有内建的printf 。

基本上

但你可以简单地做:foo="Hello"

foo="$foo World"

echo $foo

Hello World

格式化,使用分叉printf

如果你想使用更复杂的结构,你必须使用一个分支(新的子进程来完成这个工作,并通过stdout返回结果):foo="Hello"

foo=$(printf "%s World" "$foo")

echo $foo

Hello World

从历史上看,您可以使用反引号检索分叉的结果:foo="Hello"

foo=`printf "%s World" "$foo"`

echo $foo

Hello World

但是这对于嵌套并不容易:foo="Today is: "

foo=$(printf "%s %s" "$foo" "$(date)")

echo $foo

Today is: Sun Aug 4 11:58:23 CEST 2013

用反引号,你必须用反斜条将内部叉子脱出来:foo="Today is: "

foo=`printf "%s %s" "$foo" "`date`"`

echo $foo

Today is: Sun Aug 4 11:59:10 CEST 2013

链接地址: http://www.djcxy.com/p/761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值