環境変数
引例
Linux システムでは、ls コマンドを使用し、コマンド ラインに直接 ls を入力します。現在のディレクトリの内容が一覧表示されます。 ls の実行可能ファイルは /usr/bin/ ディレクトリにあります。以下に示すように:
次の状況を見てください:
上記の 2 つの「異なる」コマンドが同じ機能を実現するのはなぜですか?
その理由は環境変数なんてこった!通常入力する ls は実際にはこのディレクトリにあるためです。実行可能ファイル。 ls と入力すると、コマンド ラインは「環境変数のパス」を介してファイルを自動的に検索します。
この状況を確認するには?次の現在の環境変数を調べます。
echo $PATH
現在の環境変数にパス ==/usr/bin/== が含まれていることがわかります。ls と入力すると、パスに基づいて関連する実行可能ファイルが自動的に検索されます。
環境変数
一般に、オペレーティング システムの動作環境を指定するためにオペレーティング システムで使用されるいくつかのパラメータを指します。環境変数は通常、何らかの特別な目的を果たし、グローバル プロパティを持つことがよくあります。
一般的な環境変数
- PATH: コマンドの検索パスを指定します。
- HOME: ユーザーのホーム作業ディレクトリを指定します。
- SHELL: 現在のシェル、通常は /bin/bash
エコー
環境変数の表示
echo $環境変数名
以下の例:
echo $PATH && echo $HOME
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/xty/.local/bin:/home/xty/bin
/home/xty
輸出
環境変数を変更する
使用法:export PATH=
は代入操作と同等で、使用法は分割です。
例:
export PATH=$PATH:/home/xty/cplusplus/linux/1027
解释:将PATH修改为$PATH(原来的环境变量)+自己新设置的路径。(注意路径中不能有. 否则会当成当前路径)
このパスの下に実行ファイルがありますが、これは自分で作成した C 言語ファイルです。
以前は、上記のように独自のファイルを実行する必要がありましたが、現在はその必要がありません。
奇跡の瞬間を目撃しましょう!以下のように
ファイル名を入力するだけでプログラムを実行できる、これが環境変数の役割です。
環境
すべての環境変数を表示
設定を解除する
変数または関数を削除します
[-option] 名の設定を解除します
f: 関数
v: 変数
セット
ローカルに定義されたシェル変数と環境変数を表示します。
コードを通じて環境変数を取得する
int main(int argv, char* argv[], char *env[])
最初のパラメータ: 渡されるコマンド ライン パラメータの数を表します。
2 番目のパラメータ: コマンド ライン パラメータへのポインタを格納します。サイズは argv
です。 3 番目のパラメータ: システム環境変数を格納します。
3 番目のパラメータを使用して取得します
1 #include<stdio.h>
2
3 //通过第三个参数获取环境变量。
4 int main(int argc, char *argv[], char *env[])
5 {
6 printf("begin.............\n");
7
8 int i;
9 for(i = 0; env[i]; i++)
10 {
11 printf("env[%d]:%s\n",i,env[i]); // 打印环境变量
12 }
13
14 printf("end.................\n");
15
16
17
18 return 0;
19 }
グローバル変数 enviorn を使用して環境変数を取得します
上の図に示すように、これらの環境変数は environ に格納され、環境変数へのポインタが格納されます。
例: 環境変数は、グローバル変数を使用して取得することもできます。
1 #include<stdio.h>
4 int main(int argc, char *argv[])
5 {
6 printf("begin.............\n");
7
8 extern char **environ;//声明全局变量
9 int i = 0;
10 for(; environ[i];i++)
11 {
12 printf("%s\n",environ[i]);
13 }
システムコールを通じて環境変数を取得する
システムコール関数
getenv (環境変数名)
例を実行します。
1 #include<stdio.h>
2 #include<stdlib.h>
4 int main(int argc, char *argv[])
5 {
6
7 printf("%s\n",getenv("PATH"));
8 printf("%s\n",getenv("HOME"));
9 return 0;
10 }
//输出结果
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/xty/.local/bin:/home/xty/bin
/home/xty
環境変数にはグローバル プロパティがあります
-
子プロセスは、親プロセスの環境変数を継承できます。
例: char *env[] を通じて環境変数を取得できるのはなぜですか?
私たちが作成したテスト プログラムは親プロセス (bash) によって作成されたため、これらの環境変数は親プロセス (bash) に属し、子プロセスに継承されます。何も渡されませんでした。実際、親プロセスが自動的にそれを渡しました。 -
環境変数にはグローバル プロパティがあります。
エクスポートによって設定された環境変数にはグローバル プロパティがあります。
コードを見てください:
1 #include<stdio.h>
2 #include<stdlib.h>
4 int main(int argc, char *argv[])
5 {
6
7 printf("%s\n",getenv("XTYY")); //获取XTYY环境变量
8
9 printf("\n");
10 }
最初は XTYY 環境変数を設定しなかったので、何も得られませんでした。その後、エクスポートで設定した後、再度プログラムを実行したところ、環境変数が取得できていることがわかりました。したがって、環境変数にはグローバルなプロパティがあることが証明できます。
main 関数の最初の 2 つのパラメータの役割
int main(int argv, char* argv[])
最初のパラメータ: 渡されるコマンド ライン パラメータの数を表します。
2 番目のパラメータ: コマンド ライン パラメータへのポインタを格納します。サイズは argv です
これらのパラメータの機能を説明するサンプル プログラムがあります。
例 1:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<unistd.h>
5
6
7
8 int main(int argc, char *argv[])
9 {
10 if(argc != 2)
11 {
12 printf("Usage: %s 至少要有一个选项\n", argv[0]);
13 return 1;
14 }
15
16 if(strcmp("-a", argv[1]) == 0)
17 {
18 printf("这是功能一\n");
19 }
20 else if(strcmp("-b", argv[1]) == 0)
21 {
22 printf("这是功能二");
23 }
24
25 return 0;
26 }
27
上記の例から、プログラムの実行後、コマンド ライン オプションが argv 配列に格納され、それによってさまざまな機能が実現されることがわかります。
例 2:
8 int main(int argc, char *argv[])
9 {
10 printf("argc = %d\n",argc);
11
12 int i = 0;
13 for(; i<argc; i++)
14 {
15 printf("%s ",argv[i]);
16 }
17 printf("\n");
18 }
argc はオプションの数を表し、argv[0] はコマンドを表し、残りはオプションを表すことがわかります。
以上が環境変数に関する知識ですが、今後も追加していきますのでご期待ください。