シェルスクリプトの変数代入のスペース

シェルスクリプトの変数代入のスペース

次の変数割り当ての違いは何ですか?

var=23
var =23
var= 23
var = 23

代入演算子の周りのスペースはどのような違いをもたらしますか?

ベストアンサー1

多くはケーシングに依存します。 4つの主要なシェル系列(Bourne、csh、rc、fish)だけを見ると、次のようになります。

バーンファミリー

これはBourneシェルとそのすべてのバリアント、、、、ksh/ 、です。bashashdashzshyash

  • var=23: これは正しいスカラー変数割り当て構文です。引用符のない文字、数字、またはアンダースコアで構成される単語、および=コマンド引数の前に表示される引用符のない単語(ここでのみ)。
  • var =23、asパラメータを持つvarコマンド=23(inは、コマンドパスに拡張された特殊演算子であるzsh場合は除外されます。有効なコマンド名ではない可能性が高いため、エラーが発生する可能性があります)。=somethingsomething23
  • var= 23:割り当てvar=の後にはコマンド名が続きます23。これは23、実行する環境(NULL値を持つ環境変数)に渡すことを意味します。var=var
  • var = 23varコマンドは、=および23パラメータを使用します。echo = 23たとえば、試してみてください。

kshzshおよびいくつかのフォームもサポートしていますbashyash大量に/リスト構文変更変数展開と拡張のため。ksh93zshまたbash支えます連想配列3. 構文がksh93異なります。複合変数そしてタイプ、オブジェクトプログラミング言語のオブジェクトとクラスを連想させます。

Cesファミリー

cshそしてtcsh。変数の割り当てには、set var = valueスカラー変数、set var = (a b)配列、setenv var value環境変数、割り当て、および算術評価の@ var=1+1構文があります。

だから:

  • var=23var=23コマンドを呼び出すだけです。
  • var =23varパラメータを使用してコマンドが呼び出されます=23
  • var= 23var=パラメータを使用したコマンドの呼び出し23
  • var = 23コマンドはおよび引数を使用して呼び出されますvar=23

RCファミリー

つまりrc、、、esそしてakanga。これらのシェルでは、変数は配列であり、割り当てはwith、var = (foo bar)short var = foofor with ( var = (foo)1つの要素を持つ配列foo)、およびvar =short for var = ()(要素のない配列、空の要素を持つ配列の場合、var = ''または使用)です。var = ('')

いずれにせよ、周囲のスペース(スペースまたはタブ)は=許可され、オプションです。したがって、これらのシェルでは、この4つのコマンドはvar = (23)要素の配列を割り当てるのと同じです23

fish変数割り当て構文はですset var value1 value2。のように、rc変数は配列です。

したがって、名前にaを含むコマンドをcsh実行できないことを除いて、動作はwithと同じです。そのようなコマンドがある場合は、たとえば呼び出す必要があります。fish=shsh -c 'exec weird===cmd'

したがって、すべてvar=23およびvar= 23エラーは、コマンドを引数としてvar =23呼び出し、コマンドを引数として呼び出すことです。var=23var = 23var=23

おすすめ記事