引数なしのsetコマンド

引数なしのsetコマンド

すべての環境変数を表示したいと思っていましたenv。たまたまコマンドを発行したところset、コンソールにスクリプトが「cat」されたようです。なぜこのようなことが起こるのでしょうか?

これ参照ページ説明していないようです。

 If no options or arguments are supplied, set displays the names
 and values of all shell variables

答え1

setはシェルの組み込みコマンドです。これをコマンド ラインで実行すると、現在の環境のすべてが表示されます。これには、ロードした関数も含まれます。ほとんどのディストリビューションでは、シェル プロファイルに少なくともいくつかの便利な関数が含まれており、bash 補完がインストールされている場合は、大量の便利な関数が含まれていることに注意してください。

envはバイナリです。他のコマンドと同様に、シェルによって読み込まれ、実行されます。したがって、エクスポートした環境変数のみを参照し、シェル環境から関数を除外する必要があります。

答え2

Frank Schrijverがコメントで説明したように、bash組み込み関数はsetすべてのシェル変数(そのランタイムにのみ存在する変数)とすべてのシェル関数も再び、その特定のシェルプロセスで初期化され、存在する関数。
例えば、次のような関数が表示されます。

_tilde () 
{ 
   ...
}

~これは、bashの行エディタで文字のタブ補完を提供するための関数です。
実際、のbashドキュメントはset、コマンドを実行することで表示できます。

man bash | less '+/^\s*set \[--'

デフォルトではすべてのシェル関数が印刷されるという事実については言及されていませんが、あなたが発見したように、また他の人が指摘したように、シェル関数も印刷されます。

関連情報