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

Car*_*pos 13 bash scripts android environment-variables adt

我正在尝试在 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
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做才能解决它。

Eli*_*gan 18

但是在设置环境变量之后

看起来您没有正确执行此操作。

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

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

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

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

    (发生这种情况是因为导出多个变量的语法export NAME1 NAME2 正确的。)

  2. 在周围放置空间=在许多编程语言中,大多数时候用空格填充运算符既有效又在风格上更受欢迎。但是要为 shell 脚本中的变量赋值(或在您发出 shell 命令的其他情况下),这是不允许的。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
    
    Run Code Online (Sandbox Code Playgroud)
    export SILLYPATH='/home/ek/silly name/bin'
    
    Run Code Online (Sandbox Code Playgroud)
    export SILLYPATH="/home/ek/silly name/bin"
    
    Run Code Online (Sandbox Code Playgroud)

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

  5. 当根本不需要做任何事情时分配和/或导出变量。这是一个元错误。具体的技术问题通常是上述问题之一,但解决方案是摆脱违规行或其中的一部分,而不是修复它。.bashrc当然,不要不加选择地从 中删除代码。但是一个export可能是意外添加的,或者可能无意中包含了比预期更多的代码。例如,假设您打算编写:

    echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc
    
    Run Code Online (Sandbox Code Playgroud)

    这将附加到.bashrc,然后重新获取它。但是假设您改为写道:

    echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc  # WRONG!
    Run Code Online (Sandbox Code Playgroud)

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

    为了避免这个问题,我建议.bashrc在编辑器中进行编辑(例如nano ~/.bashrc, gedit ~/.bashrc),而不是将输出重定向到它的末尾>>

我怀疑这可能足以让您找到并修复.bashrc文件中的错误。如果您需要进一步的帮助,您当然应该发布该文件的完整内容以供分析。(巧合的是,您的问题恰好是一个经常遇到的问题,并且带有足够透明的错误消息,使这样的一般答案成为可能。)

  • 谢谢!这么详细的回答。在我的情况下,在 **=** 周围放置空间是问题所在。我为此苦苦挣扎了一段时间。 (2认同)

小智 9

确保您正在运行:

export ENV_VARIABLE
Run Code Online (Sandbox Code Playgroud)

而不是:

export $ENV_VARIABLE
Run Code Online (Sandbox Code Playgroud)

否则,您正在尝试导出变量的值而不是变量本身,因此您将收到此错误。