私はすべてのシェル変数をリストするコマンドを検索している間、すべての環境変数をリストするコマンドがあることに気づきましたが、どういうわけか私が知らない理由ですべてのシェル変数をリストした人はいません。
さて、ここにすべての変数、シェル、環境変数を表示する方法に答えてくれた人がいます。
( set -o posix ; set ) | less
彼は実際にこの表現が何をしているのかを一般の人々に説明しません。
私が知っているのは次のとおりです。
- (コマンド1、コマンド2)これにより、コマンドはシェルの子プロセス内で実行されます。
置く変数を宣言するいくつかの方法ですが、それが何であるかはわかりません。-o posix第二の意味と理由置く継続的に実行
コマンド少ないそれは問題ではありません。私がそれを理解しても、それは出力をより制御するためのポケットベルです。
答え1
set
すべてのシェル変数を表示します(エクスポートしたかどうか)。 Bashでset -o posix
シェルを次に設定します。POSIX互換モード。 (他のシェルにも同様の機能に似た構文があるかどうかはわかりませんが、ここではBashを使用しているとします。)
この場合の違いは、通常、Bashはset
シェル関数も表示しますが、POSIXモードではset
変数のみが表示され、出力形式がわずかに変更されることです。
- オプションなしでset組み込み関数を呼び出すと、シェル関数名と定義は表示されません。
- オプションなしでset組み込み関数を呼び出すと、結果に印刷できない文字が含まれていてもシェルメタ文字が含まれていない場合は、引用符なしの変数値が表示されます。
Bashには次のものもあります。declare
組み込みすべての隠し変数またはBash関連の変数を表示するために使用できるフラグ:declare -p xx
Bashが入力として使用できる形式で変数を表示します。すべての変数を表示し、機能を表示するために使用できます。xx
declare -p
declare -f
答え2
基本的に2つのことが起こります。set
現在のシェルオプションを台無しにしないようにサブシェルからコマンドが呼び出され、すべての変数がリストされる前にサブシェルがPOSIXモードに設定されます。マニュアル引用:
posixは、標準(posixモード)と一致するようにPOSIX標準にデフォルト設定されているbashの動作を変更します。 posix モードが bash の動作にどのように影響するかについて詳しくは、下記のドキュメントをご覧ください。
つまり、bash
POSIXモードの動作ははるかに似ていますsh
。
Option-less の場合、set
マニュアルにも記載されており、実際には次のように記載されています。理由POSIXモードが必要な理由:
set [+abefhkmnptuvxBCEHPT] [+o オプション名] [arg ...] オプションがない場合、各シェル変数の名前と値は、現在設定されている変数を設定またはリセットするための入力として再利用できる形式で表示されます。 。 。posixモードでは、シェル変数のみが一覧表示されます。
bash
...一般モードで実行される変数と関数の定義とは反対です。
バラよりこれPOSIX モードに関する追加情報。