次の変数割り当ての違いは何ですか?
var=23
var =23
var= 23
var = 23
代入演算子の周りのスペースはどのような違いをもたらしますか?
ベストアンサー1
多くはケーシングに依存します。 4つの主要なシェル系列(Bourne、csh、rc、fish)だけを見ると、次のようになります。
バーンファミリー
これはBourneシェルとそのすべてのバリアント、、、、ksh
/ 、です。bash
ash
dash
zsh
yash
var=23
: これは正しいスカラー変数割り当て構文です。引用符のない文字、数字、またはアンダースコアで構成される単語、および=
コマンド引数の前に表示される引用符のない単語(ここでのみ)。var =23
、asパラメータを持つvar
コマンド=23
(inは、コマンドパスに拡張された特殊演算子であるzsh
場合は除外されます。有効なコマンド名ではない可能性が高いため、エラーが発生する可能性があります)。=something
something
23
var= 23
:割り当てvar=
の後にはコマンド名が続きます23
。これは23
、実行する環境(NULL値を持つ環境変数)に渡すことを意味します。var=
var
var = 23
、var
コマンドは、=
および23
パラメータを使用します。echo = 23
たとえば、試してみてください。
ksh
、zsh
およびいくつかのフォームもサポートしていますbash
。yash
大量に/リスト構文変更変数展開と拡張のため。ksh93
、zsh
またbash
支えます連想配列3. 構文がksh93
異なります。複合変数そしてタイプ、オブジェクトプログラミング言語のオブジェクトとクラスを連想させます。
Cesファミリー
csh
そしてtcsh
。変数の割り当てには、set var = value
スカラー変数、set var = (a b)
配列、setenv var value
環境変数、割り当て、および算術評価の@ var=1+1
構文があります。
だから:
var=23
var=23
コマンドを呼び出すだけです。var =23
var
パラメータを使用してコマンドが呼び出されます=23
。var= 23
var=
パラメータを使用したコマンドの呼び出し23
var = 23
コマンドはおよび引数を使用して呼び出されますvar
。=
23
RCファミリー
つまりrc
、、、es
そしてakanga
。これらのシェルでは、変数は配列であり、割り当てはwith、var = (foo bar)
short var = foo
for 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
=
sh
sh -c 'exec weird===cmd'
したがって、すべてvar=23
およびvar= 23
エラーは、コマンドを引数としてvar =23
呼び出し、コマンドを引数として呼び出すことです。var
=23
var = 23
var
=
23