変数の定義と使用
スクリプト言語は、一般的には、変数を定義するときのタイプを指定する必要はありません、あなたは割り当てを指示することができ、シェル 変数も、このルールに従うことができます。
シェルは、データ型、宣言されていない場合、デフォルトの文字列型を
バッシュシェルでは、デフォルトでは、各変数の値が文字列である、あなたは値を文字列として格納され、変数に値を割り当てるかどうかは使用の引用符はありません。あなたは、変数の型宣言を宣言しない限り、
あなたは、変数を定義するときに(または変数に値を代入ドル記号なし)ドル記号なし
変数を使用する際にドル記号を追加するには
中括弧外の変数名はオプションですが、プラス何もせずに、境界インタプリタ変数を識別しやすくするために括弧を追加します。すべての変数の中括弧にお勧め{ }
、これは良いプログラミングの練習です。
定義された変数は、再定義することができ、再定義されたドル記号を追加しない(変数の割り当てのためには、変数を定義することです?)
ときに変数代入、変数名と等号と値の間のスペースなし
= your_nameは「トム」//、ドル記号なしで変数を定義する変数名と等号の間にスペースはできません //変数のエコー$のyour_nameを使用 your_name = 「アリババ」//再定義ドル記号が追加されていない
エコーの$ your_nameを
your_nameフィールド= "qinjx" {} //なしの変数名外側エコー$のyour_nameは $エコー{ your_nameフィールド}推奨// {}プラス変数名を、
以下のためのスキルでエイダコーヒーアクションジャワ; んエコー//「私は$ {スキル}グッドスクリプトAT AM」 国境プラス変数名} {効果的変数を特定します
完了
変数の命名
- 文字、数字、アンダースコアのみという名前の、最初の文字は数字で始めることはできません。
- バッシュのキーワードで使用することはできません(予約されたキーワードを見るためにコマンド--help利用できるbashの)
シェルの有効な変数名の例
RUNOOB
LD_LIBRARY_PATH
_var
var2で
無効な変数の命名
?ヴァール = 123 //文字、数字、アンダースコア以外の文字を使用することはできません
ユーザー名* = runoob
= Runoobの1name番号で始まる//は使用できません。
変数の値
変数値の値が空白(例えばスペース、タブインデント、等)を含まない場合は、マークが使用されなくてもよいです。
値が空白文字が含まれている場合は、それを囲む引用符を使用する必要があります。
単一引用符を使用し、二重引用符も区別されています
単一引用符' '
単一引用符で囲まれた変数の値は、それが出力するものは何かということですでも、変数の内容およびコマンド(とは、コマンドは、トランスがに原因が必要です)それらを、彼らが出力されますよう。この実施形態は、望ましくない解析され、純粋な文字列変数、シーンコマンドの場合に定義された表示に適しています。
二重引用符は、" "
ときに最初の変数と出力コマンドを解決する変数の値に囲まれた変数名ではなく、二重引用符とコマンドが出力されます。このアプローチは、変数やコマンドを伴って、より適した文字列であり、あなたが定義し、出力変数を解析します。
私のアドバイスは:変数の内容がデジタルである場合は、引用符を追加することはできません。あなたが本当に必要な場合は、単一引用符として出力され、文字列など他の特別な要件は、引用符で囲まれた最高ではない、二重引用符の変数を定義するとき最も一般的な使用シナリオです。
変数に割り当てられたコマンドの結果
シェルはまた、変数に割り当てられたコマンドの結果の実装をサポートする、一般的には、以下の2つの方法があります。
変数= `command`
変数 = $(コマンド)
最初のアプローチは、抗コマンドマーク` `
(下方Escキー)を囲まれ、トランスおよび単一引用符は非常に似ています、混乱を作成し、それがこのように推奨されていません。
コマンドを使用する2番目の方法は、$()
より明確に区別囲まれ、この方法を使用することをお勧めします。
読み取り専用の変数
読み取り専用変数のような変数を定義するには、読み取り専用コマンドを使用して、読み取り専用の変数の値を変更することはできません。
#!/ binに/ bashの myurl = " http://www.google.com " 読み取り専用の //を変更することはできません後myurlが、それ以外の場合はエラーになります
変数を削除します。
未設定の変数名
シェル変数のスコープ
シェル変数が3分割することができスコープ
グローバル変数:シェルで定義されている現在の変数(関数の外に定義された変数)、(事前変数ローカルせず)関数定義内部変数は、グローバル変数、グローバル変数は、現在のシェル内でのみ有効であり、現在の内部機能を含むシェルであります無効なサブシェルとシェルの父
ローカル変数:内部関数定義、および関数内でのみ有効なローカル変数が先行
内部変数は、グローバル変数、ローカル変数ローカルにローカルが存在しない場合には、機能を定義しました
環境変数:現在のシェルで有効と息子は、シェル。私たちは、環境変数で定義された変数となり、輸出を使用することができます。
個人的な理解:親シェルはサブシェルを生成するために、子シェルの父は、環境変数の独自のコピーとしてシェル環境変数になります。グローバルとローカル変数はコピーされません。だから、サブシェルは、独自の環境変数に、実際には、訪問を親シェル環境変数にアクセスすることができるように思われる(すなわち、親シェル環境変数のレプリカ)サブシェル世代、環境変数と親シェルサブシェル環境変数の後に、彼らは独立しており、変更後お互いに影響を与えません。
環境変数も一時的なもの
変数環境への輸出後にexportコマンドによって、共通のグローバル変数。しかし、輸出輸出環境変数は、一時的と現在のシェルとそのサブシェルでのみ有効です。ときに新しいシェルを再オープンし、動作しません。
かかわらず、それらの間の親子関係が存在するかどうかの、全てのシェルプロセスにおける効果的な変数を取得するには、どのようにそれを行うには?
シェルは、この目標を達成するために、唯一の変数設定ファイルを書きます!シェルプロセスが毎回実行された場合、構成ファイル内の変数ならば、あなたは、いくつかの初期化コードを実行するための設定ファイルを起動するので、あなたが起動するたびにプロセスがこの変数を定義します。