为什么我的 shell 变量串联在 ubuntu bash 上不起作用?

为什么我的 shell 变量串联在 ubuntu bash 上不起作用?

我无法解释以下行为。有任何想法吗 ?

    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$。如果是这样,则更改设置此变量的文件。

相关内容