複数の投稿を読みましたが、Centos 7.5で特殊文字を含む変数をエクスポートできないようです(特殊文字が問題だと思います。他の問題の場合は修正してください)。コマンドはexport TEST-ME=blah
を返します-bash: export: TEST-ME=blah: not a valid identifier
。バックスラッシュと一重引用符と二重引用符のいくつかのバリエーションを使用してエスケープしようとしましたが、結果は同じです。私は何が間違っていましたか?
答え1
しかし、環境変数にはNULを除く任意の文字または非文字を含めることができ、 =
POSIXexport
シェルの特別な組み込み関数はシェル環境によって変わります。
ほとんどのBourneシェルでは、シェル変数はアルファベット文字(通常はPOSIX移植可能な文字セットの文字に制限されています)またはアンダースコアで始まり、その後に英数字(またはアンダースコア)が続く必要があります。-
通常、英数字には分類されません。
その環境に渡されたコマンドを実行するには、TEST-ME=blah
次のようにします。
env TEST-ME=blah a-command
rc
派生クラスはシェル変数に任意の文字を含めることができ、シェル変数はシェルで実行されているコマンド環境に自動的にエクスポートされます。
ただし、Byron Rakitzisのバリアント(現在のオープンソースであるPlan9 / Unix V10の元のバリエーションとは反対)を使用すると、数字と下線以外の移植可能な文字セットの文字がバイト値の16進数_xx
でエンコードされます。xx
文字。
したがって、 を使用すると、rc
次のことができます。
TEST-ME = blah; my-command
rc
ただし、実装によってはシェルから受け取った環境をmy-command
取得するTEST-ME=blah
か、環境にあります。TEST__2dME=blah
いずれにせよ、移植可能な文字セットに数字以外の文字を含む(または数字で始まるまたは空の)環境変数名を使用することは、いくつかのシェルを含む複数のアプリケーションのmksh
場合と同様に、悪い考えです(例:以下から削除されました)。輸入。
例えば、
env TEST-ME=blah mksh -c 'printenv TEST-ME'
何も返しません。
他のシェルと同様に、その環境に渡されたシェルをいつでも再実行できますTEST-ME=blah
。シェルはこれらの環境変数をシェル変数にマップしませんが、一部はまだ実行しているコマンドに渡します。だから:
exec env TEST-ME=blah /proc/self/exe
たとえば、TEST-ME=blah
環境に追加されたメソッドです。