シェル変数と環境変数

シェルスクリプトグローバル変数、ローカル変数の
異なるスコープでは、互いに干渉しないパラメータ名、暁明クラスAの学生という男かのように、Bクラスは、また暁明の学生という男です
、彼らは暁明は(に対応する呼び出しが、変数名)が、理由の範囲に対応するクラスは、()別の場所に、それは混乱はありません。
リトル明と呼ばれる2つの学生とのクラスがある場合でも、それはので、それらを区別するために名前の「リトルいること」、「そのサイズ」に類似していなければなりません。

シェルスコープの変数は、3つのタイプに分けることができます。

有的变量只能在函数内部使用,这叫做局部变量(local variable);
有的变量可以在当前 Shell 进程中使用,这叫做全局变量(global variable);
而有的变量还可以在子进程中使用,这叫做环境变量(environment variable)。

シェルローカル変数
シェルは、カスタム機能をサポートしていますが、異なる点は、シェル関数やC ++やJava、C#や他のプログラミング言語機能は次のとおりです。
デフォルトでは、Shell関数で定義された変数は、グローバル変数であり、それは変数の定義外の機能を持っています同じ効果。次のコードを考えてみます。

#!/bin/bash
#定义函数
function func(){
a=99
}
#调用函数
func
#输出函数内部的变量
echo $a

出力:
99

関数は、内部で定義されているが、外部関数は、その値で得られ、それはグローバルスコープであることを証明する、内部機能に限定されないことができます。

変数のスコープに機能に限定されていたユーザーが定義したとき、あなたはそれがローカル変数の変数になり、その時点で、地元のコマンドを追加することができます。次のコードを考えてみます。

#!/bin/bash
#定义函数
function func(){
local a=99
}
#调用函数
func
#输出函数内部的变量
echo $a

出力は、外部関数で有効な変数は、ローカル変数であることを示す、空です。

シェル変数でこの機能とJavaScript変数は似ています。関数定義内のJavaScriptの変数は、デフォルトでは唯一一緒に、varキーワードと、それはローカル変数になり、グローバル変数です。

このセクションでは、単純な定義と呼び出し機能を発揮し、細部のあまりに多くの文法的な説明をしなかった、私たちは「シェル機能」セクションを説明するために、綿密なフォローアップを行います。

シェルは、グローバル変数は
変数が現在のシェルプロセス全体で有効です意味、グローバル変数と呼ばれます。シェルは、各プロセスは、互いに独立して互いに、それ自身の範囲を有しています。シェルで定義された変数は、デフォルトでは、グローバル変数です。

シェルの異なるプロセスでのグローバル変数の無関係実証したい、シェルは、グラフィカルインターフェースの両方を開く、またはサーバ(SSH)に接続された2台の遠隔端末を使用することができます。

シェルは、第一の窓、可変割り当て及び99の定義を開き、同じ時間ウィンドウ内でシェルが正しく変数の値を印刷し、印刷されました。
そして、シェルはまた、変数の値を印刷する新しいウィンドウが開きますが、結果はNULLです

グローバル変数は唯一、その最初のシェルプロセスの有効、新しいシェルのプロセスに影響を与えずに定義されていることをこれは示しています。xiaowangjiaとアレックスは小さいテレビセット(同じ変数名)を有し、これはよく理解されて、
同じ時間に小さく、小さな徐王テレビ番組の放送が異なる(異なる変数値)とすることができます。

グローバル変数のスコープではなく現在のシェルスクリプトファイルの、彼らは異なる概念である、現在のシェルプロセスであることを強調しなければなりません。プロセスを作成したシェルのシェル上のウィンドウを開き、
シェルシェルは、プロセスの数を作成し、オープン複数のウィンドウに、各プロセスは、シェルとは独立して、異なるプロセスIDを持っています。複数のコマンドシェルスクリプトのソースファイルを実行するために使用することができるプロセスでシェル、
グローバル変数のこの時点では、スクリプトファイルに有効です。

例えば、a.shとb.sh.二つのシェルスクリプトは、あります 次のようにa.shコードは次のとおりです。

#!/bin/bash
echo $a
b=200

次のようにb.shコードは次のとおりです。

#!/bin/bash
echo $b

シェル・ウィンドウを開き、次のコマンドを入力します。

[py]$ a=99
[py]$ . ./a.sh
99
[py]$ . ./b.sh
200

これら三つのコマンドが、有効なa.shコマンドライン変数の形で、一つのプロセスで実行される出力結果から求めることができ、シェル・ウィンドウが定義され、a.sh
Bで定義された変数にb.shも有効、変数bはスコープa.sh.を超えてしまいました

あなたは、現在のプロセスのシェルでスクリプトを実行する必要があります、シェルスクリプトが新しいプロセスで実行することはできません、読者に行く理解していない「シェルスクリプトの実行。」

シェル環境変数は、
グローバル変数は、他のシェルと子プロセスは効果がない、現在のシェルプロセスでのみ有効です。あなたはグローバル変数をエクスポートするexportコマンドを使用している場合は、
それが呼び出されたすべてのサブプロセスにも有効である「環境変数。」

環境変数はシェルプロセスは親プロセスと呼ばれるに作成されたとき、我々はシェルコマンドを実行するために、親プロセスで新しいプロセスを作成する場合、この新しいプロセスは、シェルの子プロセスと呼ばれています。
シェルの子プロセスが生成されると、それは環境変数は親プロセスから子プロセスに渡すことができるように、自分自身の使用のために親プロセスの環境変数を継承します。当然のことながら、環境変数も孫に渡すことができます。

注2つのシェルプロセスの親と子の関係は、環境変数を渡されていないされていないがされていること、および環境変数がダウンして渡すことができると、アップ渡すことができない「息子に父は渡しません。」

子プロセスを作成するためのシェルはbashコマンドを実行する最も簡単な方法です

層によるシェル層は、exitコマンドを通って出ることができます。

環境変数の使用については、次のプレゼンテーション:

[py]$ a=22       #定义一个全局变量
[py]$ echo $a    #在当前Shell中输出a,成功
22
[py]$ bash       #进入Shell子进程
[py]$ echo $a    #在子进程中输出a,失败

[py]$ exit       #退出Shell子进程,返回上一级Shell
exit
[py]$ export a   #将a导出为环境变量
[py]$ bash       #重新进入Shell子进程
[py]$ echo $a    #在子进程中再次输出a,成功
22
[py]$ exit       #退出Shell子进程
exit
[py]$ exit       #退出父进程,结束整个Shell会话

デフォルトでは、見つけることができ、シェルの子プロセスが無効であり、輸出の使用は、それを使用することができ、子内の変数の後に環境にエクスポートされます。

この形式は、エクスポート、A = 22を書き込むことができ、以降で定義された変数をエクスポートし、エクスポートしたい場合は、環境変数として定義されながら、環境変数としてエクスポートすることです。

あなたは、端子を介して新しいシェル・ウィンドウを作成する場合は、;私たちは、常に環境変数はシェルサブプロセスに有効であり、そしてそれは、シェルプロセスのすべてに効果的ではないことを強調してきた
し、それが現在のシェル、環境の子ではないことこの新しいプロセスのシェル変数はまだ有効ではありません

環境変数は一時的なもの
の輸出輸出環境変数シェルのみ現在のプロセス上およびすべての子が最上位の親プロセスが閉じられた場合には、環境変数も消えていた、効果的に処理することにより、
他のプロセスが使用することはできません、その環境変数は一時的なものであること。

すべての問題が解決しない場合は、あなたが最後に持っていない、最後の分を解かれます

また、いくつかのスクリプト差:

(1)の/ etc /プロファイル:このファイルは、各ユーザ環境情報システム用に設定されている場合にユーザーが初めてログインすると、ファイルが実行され、コンフィギュレーションファイルを/etc/profile.dディレクトリから収集シェル設定。 。
(2)の/ etc / bashrcに:各ユーザーがbashのシェルbashシェルを開いたとき、ファイルが読み込まれるファイル操作を実行する(即ち、開くこと端末毎に、bashrcに実行されます)..
(3)〜/ .bash_profileを:各ユーザーは、ユーザーがファイルを一度だけ実行され、ログインすると、シェルの利用にファイル入力情報の特定を使用することができます。デフォルトでは、いくつかの環境変数を設定し、.bashrcのファイルのユーザーを実行します。
(4)〜/ .bashrcに:このファイルには含まれていあなたの情報は、bashシェルはbashに特化し、ログオンし、そしてときに新しいシェルを開くたびにファイルが読み込まれたとき。
(5)〜/ .bash_logout:システム出口(出口bashシェル)は、ファイルがまた実行されるたびには、/ etc /(グローバル)設定されたプロファイル変数は、任意のユーザに適用されてもよいし、〜/ .bashrcに。など(ローカル)変数は、変数のみの連続は/ etc / profileに設定することができ、彼らは「親子」関係です。
(6)〜/ .bash_profileの非ログインのbashにはbash〜/ .bashrcの対話モードにインタラクティブ、ログイン動作モードはしばしば両方に配置された実質的に同一の実行、後者は、典型的には、前者を呼び出します

公開された42元の記事 ウォンの賞賛3 ビュー1208

おすすめ

転載: blog.csdn.net/qq_40910138/article/details/105195173