このコマンドのスペースはどのように解釈されますかfoo= bar
?
説明これはなぜfoo=bar
違うのですか?foo= bar
はい(Ubuntu Distribution)
developer@1604:~$ foo=bar
developer@1604:~$ foo= bar
The program 'bar' is currently not installed. You can install it by typing:
sudo apt install bar
答え1
構文は次のとおりです。 Bash変数は、割り当て演算子の直後の値に初期化されます=
。ここに問題があります…
これにより、foo= bar
変数に空の文字列を割り当ててfoo
コマンドを実行しますbar
。
答え2
これにより、foo= bar
環境変数に空の文字列を割り当ててfoo
コマンドを実行しますbar
。環境変数を新しい実行に渡すために使用できます。
なぜ違うの?
スペースは区切り文字です(物事を区切るために使用されます)。スペースを追加すると2つのことにfoo=
なりますbar
。 1つ目は割り当てで、2つ目はbashにファイルを見つけて実行するように指示します。最初の項目はオプションであるため、通常は2番目の項目のみが表示されます。 2番目はオプションではありません。割り当てのみが表示されている場合は少し異なる操作を行い、シェル変数(前に1つがない限り環境変数ではないexport
)に割り当てられます。
答え3
foo= bar
:コマンドを実行する前にbar
割り当てられた値は foo
空です。正しいアプローチは、foo=bar
変数名と代入の後にスペースを避けることです。
答え4
シェルlinux / unixコマンドでを入力すると、foo=bar
文字列barがfoo
変数に入れられます。確認するには、echo $foo
返す必要があるものを入力できます。bar
これはfoo
変数に含まれるものです。
スペースを入力すると、foo= bar
シェルインタプリタは PATH 変数を介したアプリケーションコマンドで、foo 変数とハンドルバーに何も配置しません。シェルがPATH変数でbarコマンドを見つけることができず、Ubuntuディストリビューションを使用しているため、barアプリケーションをインストールするかどうかを尋ねられます。これは、アプリケーションが見つからないときに表示されるメッセージです。次のコマンドを使用してPATH変数を確認できますecho $PATH
。このシステム変数に関する追加情報ここ