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

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

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

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

答え2

var=23変数に23を割り当てますvar

var =23var引数を使用してコマンド(またはエイリアスまたは関数)を実行してみてください。=23

var = 23上記と同じですが、引数=23

var= 23環境変数をvar空の文字列に設定し、コマンドを実行します。23

はい、シェルはプログラミング言語として奇妙です。しかし、それは完全に意味がありますシェル対話型使用のために、スペースはコマンドと引数を区別します。ほとんどの「特殊文字」(=この場合)は、コマンドのほぼランダムな引数を可能にするために、特定の場所でのみ特別な意味を持ちます。上記の説明をご覧ください。

答え3

  • var=23変数に値を割り当てる正しい構文です。
  • var =23varコマンド=23オプション/引数を持つコマンドとして扱われますvar(引数/オプションの正しい/標準構文は、-optionまたはそれにもかかわらず--option)。
  • var= 23varスペースは割り当てプロセスを妨げ、23他のコマンドで処理されるため、何も割り当てません。解決策はスペースを使用var=\ 23またはvar=' 23'保存することです。
  • var = 232番目のケースで説明したのと同様の効果があります。

    実際、これらの周辺空間の活用は=内部状態をテストするためによく使用されます[[ ]]。大きな打撃の例:

    string1 = string2
           True if the strings are equal.  = should be used with the test command  for  POSIX  conformance.  
           When used with the [[ command, this performs pattern matching as described above (Compound Commands).
    

結局のところ、周囲のスペースの動作は=シェルとプログラミング言語によって異なります。

関連情報