
私は、いくつかの Unix コマンド スクリプトとコマンドを実行してジョブを簡単に実行している、自分で管理していないシステムとインターフェイスしようとしています。
変数の置換がうまくいかないので、この状況を回避するコマンドを書けるかどうか疑問に思っています。設定する変数はたくさんあるので、空の変数を入力する機会が欲しいです。問題は、システムが空の変数を渡さず、単に変数を設定しないことです。
${option.VARIABLE}: 不正な置換
そのような設定をしようとしましたが、機能しません。
if [ -z ${option.VARIABLE} ]; then option.VARIABLE=""; fi;
何か案が?
答え1
ドットは変数名に有効な文字ではありません。bashのマニュアルには次のように書かれています(ここ)
名前
文字、数字、アンダースコアのみで構成され、文字またはアンダースコアで始まる単語。名前はシェル変数名や関数名として使用されます。識別子とも呼ばれます。
しかし、私の ksh93 のマニュアルページには次のように書かれています:
定義。
[...] 識別子は、文字またはアンダースコアで始まる文字、数字、またはアンダースコアのシーケンスです。識別子は変数名のコンポーネントとして使用されます。vname は、. で区切られ、オプションで . が前に付く 1 つ以上の識別子のシーケンスです。vname は関数名や変数名として使用されます。
この部分があなたの問題に最も関連しているようです (強調は私によるものです):
パラメータ拡張。
[...] 変数は vname で表されます。 vname に . が含まれる変数を作成するには、vname が最後の . より前のすべてで構成される変数が既に存在している必要があります。
この機能は ksh93 にのみ存在し、bash には存在しません。スクリプトでこの機能を使用する場合は、ksh93 で実行する必要があります。
答え2
変数名の「.」がコードを台無しにしていると思います。
option.VARIABLE
変数の名前をからに変更するなどして、変数内のドットを削除してみてくださいoptionVARIABLE
。