设置环境变量后如何解决“无效标识符”错误?


12

我正在尝试在Ubuntu 14.04 LTS中设置cocos2dx,但是在设置了环境变量之后,.bashrc我开始出现此错误:

bash: export: dev/cocos2d-x-3.2/tools/cocos2d-console/bin': not a valid identifier 
bash: export:/home/john/android': not a valid identifier 
bash: export: dev/android-ndk-r10b': not a valid identifier 
bash: export:dev/adt-bundle-linux-x86_64-20140702/sdk': not a valid identifier

而且我不知道该如何解决。


1
您必须确切显示如何设置变量。
glenn jackman 2014年

Answers:


17

但是在设置环境变量之后

您似乎没有正确执行此操作。

您得到的错误意味着路径(如/home/john/android)被用作变量的名称,而不是被分配给它们的

  • 分配变量的正确语法是NAME=value
  • 导出变量(具有任何值,如果有的话,它已经被分配)的正确语法是export NAME
  • 同时分配和导出变量(具有分配的值)的正确语法是export NAME=value

我怀疑您正在尝试做第三件事,但使用了错误的语法。可能会产生类似您所看到的错误的五个常见错误是:

  1. 使用空格代替= export NAME value是不正确的; value然后将其解释为要导出的后续变量的名称。

    (这是因为export NAME1 NAME2 用于导出多个变量正确的语法。)

  2. 在周围放置空格=在许多编程语言中,大多数情况下使用空格填充运算符既有效又在样式上更受青睐。但是,要在外壳程序脚本中(或其他发出外壳程序命令的情况)为变量分配值,则不允许这样做。NAME = value(以export命令或其他方式)将无效;您必须使用NAME=value

    export NAME = value尝试导出名为NAME=和的变量value。幸运的是,这似乎不会在无提示的情况下成功完成,因为尝试导出名为的变量=是一种语法错误。相反,export NAME= value这似乎是可行的,但未分配valueNAME-而是分配了空值,将零长度的字符串导入NAME并导出,然后分别导出变量value。这都是常见的错误。)

  3. 用空格分隔变量值的各个部分。环境变量可以包含空格,但实际上它们很少用作环境变量中的字段分隔符。当单个变量有意包含多个路径时,通常:用于分隔它们。

  4. 分配变量时不引用空格。有时,环境变量的值应该包含一个空格。例如,它可能是真正包含空格的目录的名称。在这种情况下,必须引用任何空格。

    一种方法是在它们之前添加\。请参阅如何保护传递给cd命令的括号?以及无法删除文件以其他方式获取信息-答案中提供的方法都适用,即使这两个问题都不是专门分配给环境变量。

    例如,以下几种方法可以导出SILLYPATH带有值的环境变量/home/ek/silly name/bin

    export SILLYPATH=/home/ek/silly\ name/bin
    export SILLYPATH='/home/ek/silly name/bin'
    export SILLYPATH="/home/ek/silly name/bin"

    通常,当您必须在外壳程序中使用或分配给广泛使用的环境变量的文件夹包含空格时,重命名可能会受益。(但有时这是不切实际或不希望的。)

  5. 当根本不需要执行任何操作时,分配和/或导出变量。这是一种元错误。特定的技术问题通常是上述问题之一,但是解决方案是摆脱有问题的线路或其中一部分,而不是加以解决。.bashrc当然,不要滥加删除的代码。但是,export可能是意外添加了,或者在无意中添加了超出预期的代码。例如,假设您打算写:

    echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc

    那将附加到.bashrc,然后重新获得它。但是假设您改为:

    echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc  # WRONG!

    这样,您的export命令不仅会导出的增值PATH,而且还会尝试导出名为.和的变量,这不是您想要的。由于它们包含变量名中禁止使用的字符,因此,每次启动新的交互式bash shell时都会出错。/home/your-username/.bashrc

    为了避免这个问题,我建议编辑.bashrc在编辑器(如nano ~/.bashrcgedit ~/.bashrc),而不是输出重定向到它的结束用>>

我怀疑这可能是足够的信息,让您可以找到并修复.bashrc文件中的错误。如果您需要进一步的帮助,您当然应该发布该文件的全部内容以进行分析。(仅出于巧合,您的问题碰巧是一个经常遇到的问题,并且带有足够透明的错误消息,从而使这样的一般性回答成为可能。)


2
谢谢!这样详细的答案。在我的情况下,=周围是空格。我为此苦了一段时间。
Rengas

5

确保您正在运行:

export ENV_VARIABLE

而不是:

export $ENV_VARIABLE

否则,您将尝试导出变量的值,而不是导出变量本身,因此会出现此错误。


1

消除空格 和美元符号。例如,这与您可以通过SSH在Web服务器上设置django设置模块的方式相同,即:

export DJANGO_SETTINGS_MODULE=myapp.settings

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.