すべてのシェル変数を一覧表示するコマンドを検索したところ、何らかの理由ですべての環境変数を一覧表示するコマンドがあることに気付きましたが、何らかの理由で、すべてのシェル変数を一覧表示する人はいないのです。
しかし、ここの誰かがすべての変数、シェル、環境変数を表示する方法について答えを出しました。
( set -o posix ; set ) | less
彼は実際にこの表現が何をするかを素人に説明しませんでした、そして私の断片的な理解はその背後にある考えを理解するのに十分ではありません。
これは私が知っていることです:
-setは変数を宣言する方法の1つですが、-o posixの意味と2番目のsetが連続して実行される理由はわかりません
command | lessこれは問題ではありません。私が理解しても、出力をより詳細に制御するためのポケットベルです。
set
は、すべてのシェル変数(エクスポートされているかどうかに関係なく)を表示します。バッシュでは、set -o posix
は、シェルを POSIX互換モード に設定します。 (他のシェルが同様の機能に対して同様の構文を持っているかどうかはわかりませんが、ここではBashを想定します。)
この場合の違いは、通常Bashのset
はシェル関数も表示することですが、POSIXモードではset
は変数のみを表示し、出力形式をわずかに変更します。
- オプションなしでビルトインセットを呼び出すと、シェル関数の名前と定義は表示されません。
- オプションなしでset組み込みが呼び出されると、結果に非印刷文字が含まれていても、シェルのメタ文字が含まれていない限り、引用符なしで変数値が表示されます。
Bashには、追加で declare
builtin があり、それ以外の場合は非表示またはBash固有の変数フラグをすべて表示できます:declare -p xx
は、変数xx
をBashが入力として受け取ることができる形式で示します。 declare -p
はすべての変数を表示し、declare -f
を使用して、関数を表示できます。
基本的に2つの処理が行われます。set
コマンドは、現在のシェルオプションの混乱を避けるためにサブシェルで呼び出され、そのサブシェルはすべての変数をリストする前にPOSIXモードに設定されます。マニュアルを引用するには:
posixデフォルト操作がPOSIX標準と異なる場合のbashの動作を変更して、標準(posixモード)に一致させます。 posixモードがbashの動作にどのように影響するかを詳しく説明しているドキュメントへの参照については、以下の「参照」を参照してください。
つまり、POSIXモードのbash
は、sh
の動作に近い動作をします。
オプションなしのset
については、マニュアルにも記載されており、POSIXモードが必要な理由の理由が実際に示されています。
set [+ abefhkmnptuvxBCEHPT] [+ o option-name] [arg ...]オプションがない場合、各シェル変数の名前と値は、現在設定されている変数を設定またはリセットするための入力として再利用できる形式で表示されます。 。 。posixモードでは、シェル変数のみがリストされます。
...bash
が通常モードのときに行われる変数と関数の定義とは対照的です。
POSIXモードの詳細については this を参照してください。