web-dev-qa-db-ja.com

環境変数を設定した後、「有効な識別子ではありません」エラーを修正する方法は?

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

そして、私はそれを修正するために何をすべきかわかりません。

10
Carlos Campos

しかし、環境変数を設定した後

あなたはそれを正しくしなかったようです。

取得するエラーは、パス(/home/john/Androidなど)が変数に割り当てられたvaluesではなく、変数のnamesとして使用されていることを意味します。

  • 変数を割り当てる正しい構文はNAME=valueです。
  • 変数をエクスポートするための正しい構文(値がある場合は既に割り当てられています)はexport NAMEです。
  • (割り当てられた値を持つ)変数を同時に割り当ててエクスポートするための正しい構文は、export NAME=valueです。

3番目のことをしようとしているが、間違った構文を使用していると思われます。表示されているようなエラーを引き起こす可能性のある5つの一般的な間違いは次のとおりです。

  1. =。の代わりにスペースを使用するexport NAME valueは正しくありません。 valueは、エクスポートする後続の変数の名前として解釈されます。

    (これは、export NAME1 NAME2isが複数の変数をエクスポートするための正しい構文であるために発生します。)

  2. =。の周りにスペースを置く多くのプログラミング言語では、ほとんどの場合、演算子にスペースを埋め込むことが有効であり、スタイル的にも好まれています。ただし、シェルスクリプト(またはシェルコマンドを発行している他の状況)で変数に値を割り当てる場合、これは許可されません。 NAME = valueexportコマンドなど)が機能しません。 NAME=valueを使用する必要があります。

    export NAME = valueは、NAME=、およびvalueという名前の変数をエクスポートしようとします。幸いなことに、=という変数をエクスポートしようとすると、構文エラー。対照的に、export NAME= valueは機能しているように見えますが、valueNAMEを割り当てません。代わりに、空のゼロ長の文字列をNAMEに割り当てます。それをエクスポートし、変数valueを個別にエクスポートします。どちらもよくある間違いです。)

  3. 変数の値の一部をスペースで区切ります。環境変数canはスペースを含みますが、実際には環境変数のフィールド区切り文字として使用されることはほとんどありません。単一の変数に意図的に複数のパスが含まれる場合、通常、:を使用してそれらを区切ります。

  4. 変数に割り当てるときにスペースをクォートしません。環境変数の値にスペースが含まれていると想定される場合があります。たとえば、実際にスペースを含むディレクトリの名前かもしれません。その場合、スペースを引用符で囲む必要があります。

    これを行う1つの方法は、\を前に付けることです。 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の拡張値をエクスポートするだけでなく、.および/home/your-username/.bashrcという名前の変数もエクスポートしようとしますが、これは望みのものではありません。これらには変数名で禁止されている文字が含まれているため、新しいインタラクティブbashシェルを起動するたびにエラーが発生します。

    この問題を回避するには、.bashrcを使用して出力を末尾にリダイレクトするのではなく、エディターでnano ~/.bashrc(例:gedit ~/.bashrc>>)を編集することをお勧めします。

これは、.bashrcファイルのバグを見つけて修正するのに十分な情報であると思われます。さらに支援が必要な場合は、分析のためにそのファイルの全内容を投稿する必要があります。 (偶然、あなたの問題がたまたま十分に頻繁に発生し、十分に透過的なエラーメッセージを伴って、このような一般的な答えを可能にしたことは偶然です。)

13
Eliah Kagan

実行していることを確認してください。

export ENV_VARIABLE

のではなく:

export $ENV_VARIABLE

そうでない場合は、変数自体ではなく変数の値をエクスポートしようとしているため、このエラーが発生します。

5
Lambda Pi Omega

スペースの削除およびドル記号たとえば、これは、SSHを介してWebサーバーにDjango設定モジュールを設定できるのと同じように機能します。

export Django_SETTINGS_MODULE=myapp.settings
1
Patrick Mutuku

(Webから)逆コンマを使用して何かをコピーし、環境またはbashrcファイルを更新すると、この問題が頻繁に発生することを確認しました。

開始する適切な場所は、貼り付けられたコンテンツに逆コンマを手動で入力することです。

0