BASH字符串行为奇怪

时间:2012-04-17 13:27:51

标签: string bash

为什么在此示例中,分支被设置为“m”而不是“master”?

$ branch="[master]"
$ echo $branch
m

这发生在我所在的任何目录中,但仅在我的Mac上,而不是在我的一个linux盒子上。

3 个答案:

答案 0 :(得分:2)

看起来像file name expansion,你当前目录中有一个名为m的文件吗?

答案 1 :(得分:1)

也许某种逃避问题,你试图逃避[和]吗?

编辑:我可以在我的系统上重现行为,但仅当存在名为m的文件时:

[sf@zeus:~] touch m
[sf@zeus:~] branch="[master]"
[sf@zeus:~] echo $branch
m

答案 2 :(得分:1)

事实上,正如unwind所说,这与文件名扩展有关。

[15:33] ~$ branch="[master]"
[15:33] ~$ echo $branch 
[master]
[15:33] ~$ touch m
[15:33] ~$ echo $branch
m
[15:33] ~$

当前目录中必须有一个名为m的文件或目录。

可能的补救措施是使用引用:

$ ls m # `m' exists
m
$ echo "$branch" # yet this echoes "[master]"
[master]