foo = barがfoo = barと異なるのはなぜですか? [コピー]

foo = barがfoo = barと異なるのはなぜですか? [コピー]

このコマンドのスペースはどのように解釈されますか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。このシステム変数に関する追加情報ここ

関連情報