【问题标题】:.bashrc does not read environment path correctly with spaces.bashrc 没有正确读取带有空格的环境路径
【发布时间】:2013-06-15 17:36:06
【问题描述】:

在我的 Ubuntu 13 中,我编辑了我的 .bashrc 添加了一个环境路径:

export OGRE_ANDROID_ROOT=/home/piperoman/Librerias/Ogre\ Android\ SDK

如果我 echo 变量,它可以正常工作,但是当我尝试在 makefile 中使用它时,它不会。我已经使用cd 命令进行了测试,结果如下:

$ echo $OGRE_ANDROID_ROOT 
/home/piperoman/Librerias/Ogre Android SDK
$ cd $OGRE_ANDROID_ROOT
bash: cd: /home/piperoman/Librerias/Ogre: No such file or directory

为什么echo 可以工作,但我无法通过命令正确使用变量?

【问题讨论】:

    标签: android linux bash environment-variables


    【解决方案1】:

    简答:Word-splitting

    当你有这个

    export OGRE_ANDROID_ROOT=/home/piperoman/Librerias/Ogre\ Android\ SDK
    

    环境变量包含“/home/pieroman/Librerias/Ogre Android SDK”。

    如果您使用它而不用引号括起来,Bash 将根据 IFS 环境变量将字符串拆分为单词 - 默认情况下是制表符、空格和换行符。

    所以

    cd $OGRE_ANDROID_ROOT
    

    等价于

    cd "/home/piperoman/Librerias/Ogre" "Android" "SDK"
    

    所以你应该引用它,即"$OGRE_ANDROID_ROOT"

    【讨论】:

      【解决方案2】:

      试试

      cd "$OGRE_ANDROID_ROOT" 
      

      带引号。

      【讨论】:

      • @Piperoman,这行得通。你试过了吗? mkdir dir\ with\ spaces; var=dir\ with\ spaces,然后cd $varbash: cd: dir: No such file or directory,但是cd "$var"成功了
      • 是的,我已经在 GNU bash 版本 4.2.37(1)-release (x86_64-pc-linux-gnu) 上对其进行了测试,但是路径不同,其中也包含空格。
      • 问题在于导出:OGRE_ANDROID_ROOT="/home/pieroman/Librerias/Ogre Android SDK" 和 cd "$OGRE_ANDROID_ROOT" 有效。
      【解决方案3】:

      只需在.bashrc 中添加不带反斜杠的行:

      export OGRE_ANDROID_ROOT="/home/piperoman/Librerias/Ogre Android SDK"
      

      然后在你想cd时使用引号将变量包裹起来:

      cd "$OGRE_ANDROID_ROOT"
      

      export MYT="/home/me/test/my test/"测试

      【讨论】:

        【解决方案4】:

        这是因为文件夹名称之间有空格。在 linux 中,通常不使用这些空格,因为它们没有被标识为单个文件夹。

        例如
        $ mkdir hello\ world                    // will create a folder named hello world
        $ cd hello\ world                      // go in to the created folder
        $ pwd                                  // display the directory name
        

        这将显示为 hello>space 因此环境变量 $OGRE_ANDROID_ROOT 设置为 /home/pieroman/Librerias/Ogre 而不是 /home/pieroman/Librerias/Ogre Android SDK

        要解决此错误,请重命名文件夹,以便删除空格

        【讨论】:

          猜你喜欢
          • 2019-11-19
          • 1970-01-01
          • 2012-12-29
          • 2012-02-26
          • 2022-08-19
          • 1970-01-01
          • 2014-03-17
          • 2012-07-08
          • 1970-01-01
          相关资源
          最近更新 更多