GNU/Linux >> Linux の 問題 >  >> Linux

env と set (Mac OS X または Linux) の違いは何ですか?

簡単な話:set シェルローカル変数、env を表示できます

シェルは、現在のシェルからのみアクセスできるローカル変数と、実行されるすべてのプログラムに渡される (エクスポートされた) 環境変数の 2 種類の変数を持つことができます。

set以降 組み込みです shell コマンドを使用すると、シェルローカル変数 (シェル関数を含む) も表示されます。 env 一方、独立した実行可能ファイルです。シェルから渡された変数、または環境変数のみが表示されます。

a=1 のような行を入力すると 次に、ローカル変数が作成されます (環境に既に存在していない場合)。環境変数は export a=1 で作成されます


set の出力を制限したい場合 コマンドを変数のみに追加します。POSIX モードで実行できます:

type -a env set
help set
(set -o posix; set) | nl

特定の変数のリストを細かく制御する必要がある場合は、declare などの Bash ビルトインを使用できます。 または compgen 、またはその他の Bash トリック。

man bash | less -p '-A action$'  # info on complete & compgen

# listing names of variables
compgen -A variable | nl       # list names of all shell variables
echo ${!P*}                    # list names of all variables beginning with P

compgen -A export | nl         # list names of exported shell variables
export | nl                    # same, plus always OLDPWD
declare -px | nl               # same

declare -pr                    # list readonly variables

# listing names of functions           
compgen -A function | nl
declare -F | nl
declare -Fx | nl

# show code of specified function
myfunc() { echo 'Hello, world!'; return 0; }
declare -f myfunc  

set env はシェルのビルトインです。 プログラム (/usr/bin/env) です

set いくつかのことを行いますが、それ自体で環境変数を一覧表示します。 set +x などのスイッチを設定/トグルすることもできます または set -v など

env エクスポートされた 環境変数ですが、変更された環境でプログラムを実行できます

man 1 env を参照 詳細については、


Linux
  1. InnoDBとMyISAMの違いは何ですか?

  2. Linuxコンテナとイメージの違いは何ですか?

  3. Linuxのバッファメモリとキャッシュメモリの違いは何ですか?

  1. Cのstrtok_rとstrtok_sの違いは何ですか?

  2. Linux プラットフォーム ドライバーと通常のデバイス ドライバーの違いは何ですか?

  3. adduser と useradd の違いは何ですか?

  1. Linuxのlocateコマンドとfindコマンドの違いは何ですか

  2. ls と l はどう違いますか?

  3. unlink と rm の違いは何ですか?