我无法解释以下行为。有任何想法吗 ?
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-32-generic x86_64)
* Documentation: https://help.ubuntu.com/
New release '14.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Wed Oct 21 22:43:19 2015 from 10.0.2.2
vagrant@master:~$ echo $0
-bash
vagrant@master:~$ export A=/hello
vagrant@master:~$ echo $A
/hello
vagrant@master:~$ echo $A/bin
/hello/bin
vagrant@master:~$ echo $A/bin/asd
/hello/bin/asd
vagrant@master:~$ export A=/hello-2.6.1
vagrant@master:~$ echo $A
/hello-2.6.1
vagrant@master:~$ echo $A/bin
/hello-2.6.1/bin
vagrant@master:~$ echo $A/bin/asd
/hello-2.6.1/bin/asd
vagrant@master:~$ echo $HADOOP_HOME
/opt/hadoop-2.6.1
vagrant@master:~$ echo $HADOOP_HOME/bin
/bin/hadoop-2.6.1
vagrant@master:~$ echo $HADOOP_HOME/bin1234
/bin1234oop-2.6.1
vagrant@master:~$ uname -a
Linux master 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
vagrant@master:~$ export A=/opt/hadoop-2.6.1
vagrant@master:~$ echo $A/bin
/opt/hadoop-2.6.1/bin
vagrant@master:~$ echo $A/bin/asd
/opt/hadoop-2.6.1/bin/asd
vagrant@master:~$ echo $A
/opt/hadoop-2.6.1
vagrant@master:~$
答案1
看起来您的HADOOP_HOME
变量已被定义为以回车符结尾的值,即
/
o
p
t
/
h
a
d
o
o
p
-
2
.
6
.
1
carriage return
所以当你这样做时
echo $HADOOP_HOME/bin
你得到输出
/
o
p
t
/
h
a
d
o
o
p
-
2
.
6
.
1
carriage return
/
b
i
n
全部都在一条线上,所以/bin
覆盖屏幕上的/opt
看起来像
/bin/hadoop-2.6.1
你可以通过这样做来检查这一点
A=/opt/hadoop-2.6.1
echo $A | od -cb
echo $HADOOP_HOME | od -cb
尝试找到HADOOP_HOME
定义的位置。它可能是你的“之一”.
" 文件;例如,.profile
、.bashrc
、 或.bash_profile
在您的主目录中,或在 中的类似名称的文件/etc
。如果您使用,它应该在字符串末尾vi
显示;这代表回车。删除.^M
^M
答案2
看起来变量$HADOOP_HOME
末尾有一个 CR 字符。用 来检查这一点echo $HADOOP_HOME | cat -vet
。它应该看起来像/opt/hadoop-2.6.1$
。如果是这样,则更改设置此变量的文件。