Bash 変数のスコープ

Abid Ullah 2023年6月20日
  1. Linux での Bash 変数のスコープ
  2. Bash で変数を宣言する方法
  3. Bash の変数のスコープ
  4. 変数の種類
Bash 変数のスコープ

この記事では、Linux の bash variable scope について学びます。 また、Linux オペレーティング システムの bash スクリプトで変数を宣言する方法も学びます。

さらに、さまざまなタイプの変数と、Linux OS を使用して bash スクリプトでローカル変数とグローバル変数にアクセスする方法について説明します。 Linux で使用される変数の概念から始めましょう。

Linux での Bash 変数のスコープ

変数は、任意のプログラミング言語で処理されるさまざまなデータ型の一時的な記憶域です。 変数は、データ型とその値という 2つの別個のエンティティに関連付けられることがよくあります。

データ型は変数に保持されるデータを記述し、値はデータ自体を表します。 Bash プログラミングで変数を宣言する場合、データ型を明示的に指定する必要はありません。

これは、プログラミング言語がデータ型自体を検出するためです。 たとえば、bash では、変数に数値を代入すると、すぐに整数として扱われます。

Bash で変数を宣言する方法

bash では、等号 '=' を使用して任意の名前の変数を宣言でき、その値を割り当てます。 以下は、bash で変数を宣言するために従うことができるいくつかの規則です。

  • 変数名には、大文字と小文字、数字、アンダースコア、および小数をすべて使用できます。
  • Bash スクリプトの変数名には大文字を使用することをお勧めします。
  • 等号 '=' の前後にスペースを入れないでください。
  • ifelselocal など、定義済みのキーワードはすべて制限されています。

以下は、bash で String 変数を宣言する例です。 ターミナルを開き、変数を宣言します。 変数を宣言する際、等号 ('=') の周りにスペースを入れてはいけないことを忘れないでください。

$ _name=abid

echo を使用して、変数の出力を取得します。

$ echo $_name

出力:

abid

bash で整数変数を宣言します。

$ _age=24

同様に、echo を使用すると、この変数の出力も取得できます。

$ echo $_age

出力:

24

Bash の変数のスコープ

Bash 変数のスコープは、他のプログラミング言語と同様に、ローカルまたはグローバルのいずれかになります。 Bash スクリプトのどこで宣言されているかは問題ではありません。

bash のすべての変数には、デフォルトでグローバル スコープがあります。 これは、変数がスクリプトの途中で定義されている場合でも、bash スクリプトの任意の関数内で変数を使用できることを示しています。

別の言い方をすれば、bash では、スコープをグローバルにするために、スクリプトの開始時に常に変数を宣言する必要はないと主張するかもしれません。

さらに、その変数のスコープを特定の関数に限定したい場合は、bash で変数を宣言するときに local キーワードを明示的に使用する必要があります。つまり、そのスクリプト内の他の関数や他の場所からアクセスできないようにする必要があります。 .

これにより、変数のスコープが、変数が定義された関数に制限されます。

変数の種類

知っておく必要がある変数のスコープには、主に 3つのタイプがあります。

  1. ローカル変数
  2. グローバル変数
  3. 環境変数

Bash でのローカル変数へのアクセス

ローカル変数にアクセスできるのは、それらを宣言したコード ブロック内のみです。 たとえば、Bash スクリプト内で変数を宣言すると、コード外ではアクセスできなくなります。

コード例:

#!/bin/bash
echo "Learning the scope of local and global variables."

function_localVar(){
    echo "Within the function function_localVar"
    echo "Assign a variable with local keyword to a variable name: varLocal"
    local varLocal=27
    echo "Assign a variable without local keyword to a variable name: varLocal_wo"
    varLocal_wo=9
    echo "Printing within the function."
    echo "Value assigned to one with local keyword varLocal = $varLocal and without local keyword varLocal_wo = $varLocal_wo"
    echo "Exiting function_localVar"
}

glob_var=91
echo "Start of the code!"
echo "Global Variable = $glob_var"
echo "Local variable before calling function to one with local keyword varLocal = ** $varLocal ** and without local keyword varLocal_wo = ** $varLocal_wo **"
echo "Calling the function."

function_localVar

echo "Printing outside the function."
echo "Value assigned to one with local keyword varLocal = $varLocal and without local keyword varLocal_wo = $varLocal_wo"

出力:

Learning the scope of local and global variables.
Start of the code!
Global Variable = 91
Local variable before calling function to one with local keyword varLocal = **  ** and without local keyword varLocal_wo = **  **
Calling the function.
Within the function function_localVar
Assign a variable with local keyword to a variable name: varLocal
Assign a variable without local keyword to a variable name: varLocal_wo
Printing within the function.
Value assigned to one with local keyword varLocal = 27 and without local keyword varLocal_wo = 9
Exiting function_localVar
Printing outside the function.
Value assigned to one with local keyword varLocal = and without local keyword varLocal_wo = 9

bash 変数スコープ - ローカル変数

次のコードから明らかなように、おそらく local キーワードはスコープ local を設定し、変数が local として定義されている関数の外部で読み取られた場合でも、空を返します。

Bash でのグローバル スコープ変数へのアクセス

bash スクリプト全体でグローバル変数にアクセスできます。 以下の例は、グローバル変数スコープが bash でどのように機能/動作するかを理解するのに役立ちます。

コード例:

var1='Abid'
var2='Ali'
my_function () {
    local var1='Micheal'
    var2='Den'
    echo "Inside function: var1: $var1, var2: $var2"
}
echo "Before executing the function: var1: $var1, var2: $var2"
my_function
echo "After executing the function: var1: $var1, var2: $var2"

出力:

Before executing the function: var1: Abid, var2: Ali
Inside function: var1: Micheal, var2: Den
After executing the function: var1: Abid, var2: Den

bash 変数スコープ - グローバル変数

上記のコードの結果から、次の結論に至ります。

・既存のグローバル変数と同名のローカル変数が関数のスコープ内に設定された場合、ローカル変数が優先されます。

  • グローバル変数への変更は、実際に関数内で行うことができます。

環境変数

環境変数 (ENVs) は、基本的に環境がどのように機能するかを指定します。 bash では、環境変数はグローバル スコープまたはローカル スコープのいずれかを持つことができます。

ターミナルの環境内のどこにでも、そのターミナルで生成されたグローバルスコープの ENV にアクセスできます。 その端末によって境界付けられたコンテキストで動作するため、任意のスクリプト、プログラム、またはプロセスで使用できます。

ターミナルで実行されているアプリケーションまたはプロセスは、そこに指定されたローカル スコープの ENV にアクセスできません。 変数を定義した端末だけがアクセスできます。

環境変数の設定

グローバル スコープとしての環境変数:

$ export COUNTRY=USA
or
$ set NAME=Abid

ローカル スコープとしての環境変数:

$ NAME=Abid

さて、ポイントは環境変数の表示方法です。 echo を使用して、通常の変数と同じように環境変数を表示できます。

$ echo $COUNTRY 

出力:

USA

このコマンドの出力は、この変数 COUNTRY に割り当てた値、つまり USA になります。

すべての環境変数を表示する

3つの異なるコマンドを使用して、すべての ENV を表示できます。

  1. // for displaying all the global Environment Variables only
    $ printenv
    
  2. // We use this command to display local and global Environment Variables
    $ set
    
  3. // for displaying all global Environment Variables
    $ env
    
著者: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

関連記事 - Bash Variable