変数は、使用するプログラミング言語で非常に重要な概念です。変数は、特定のタイプのデータを格納するメモリ内のコンテナと考えてください。変数の主な目的は、値を格納し、後で処理するためにその値にアクセスすることです。 Java、C、C ++などの他のプログラミング言語を使用している場合、Bashには強い型システムがないため、変数定義の違いに気付くかもしれません。
Bashは2種類の変数を処理します。それらは:
- ユーザー定義変数 :作成および操作する変数。
- 環境変数 :システム/アプリケーションの目的でbashまたはアプリケーションによって作成および保存されます。
ユーザー定義変数、続いて環境変数の操作を開始します。
1。変数の作成方法
変数には、以下に示すように、識別子(変数名)とそれに割り当てられた値が必要です。識別子(変数名)は"site_name"
です。 割り当てられる値は"OSTechnix"
です。 。
$ site_name="OSTechnix" $ this_year=2021 $ value_of_pi=3.14
変数を作成するときに覚えておくべきことがいくつかあります。
- 変数名と値の間にスペースを入れないでください。
- 競合を引き起こす予約済みのbashキーワード、変数名、関数名など、すでに使用されている名前は使用しないようにしてください。
- わかりやすい変数名を作成します。変数名には、文字、数字、アンダースコア、数字を含めることができます。
さまざまな人々がさまざまな規則を使用して変数名を作成しているのを見てきたので、変数の命名規則については議論の余地があります。前の例で作成したように、スネークケースを使用してユーザー定義変数を作成するものもあれば、フルキャップで変数名を作成するものもあります。 bashには厳密なルールはありませんが、一貫性がある どんな方法を選んでも。変数にはスネークケースで名前を付け、定数には大文字で名前を付けることを好みます。
2。 Bash変数にアクセスする方法
変数にアクセスするには2つの方法があります。 1つは"$ symbol"
を使用しています その後に変数名が続き、2番目の方法は"$ symbol"
を使用することです。 中括弧と中括弧内の変数名が続きます。
$ echo $site_name
OSTechnix
$ echo ${this_year} 2021
$ echo ${this_year} $value_of_pi
2021 3.14

3。変数に値を再割り当てします
Bashには強い型システムがないため、変数を作成するときにデータ型を定義する際に厳密な規則はありません。 Bash変数はすべての値を文字列として格納し、数値計算をいつ処理するかを賢く認識します。
すでに作成されている変数に任意の値を再割り当てできます。
$ os_name="PoP_OS!"
$ echo ${os_name} PoP_OS!
$ os_name="Linux Mint" $ echo ${os_name} Linux Mint

4。変数のデータ型を宣言する
declare
を使用できます 特定のデータ型の変数を作成するコマンド。 declare
のヘルプセクションにアクセスします それについてもっと知るためのコマンド。
$ declare --help

たとえば、 int
を使用して変数を作成する場合 データ型の場合、declare
を使用できます -i
を使用したコマンド フラグ。
$ declare -i pi
$ pi=3
$ echo $pi 3
$ pi=3.14 bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")

declare
を忘れないでください コマンドは変数の属性を操作する方法ですが、declare
から強い型のシステムを期待しないでください 他のプログラミング言語と同じようにコマンドを実行します。
5。変数へのコマンド出力
任意のbashコマンドを実行し、コマンドの出力を変数に保存できます。 $()
以下のように、後で変数を使用してさらに処理します。
$ today_date=$(date)
$ echo ${today_date} Saturday 11 September 2021 08:53:25 PM IST

6。変数で引用符を使用する
bashでは、一重引用符と二重引用符は2つの異なる方法で動作します。一重引用符は拡張を防ぎ、値をリテラルとして扱います。二重引用符で拡張できます。
以下の例を見てください。 "which_year"
という名前の変数を作成しました 文字列と一緒にコマンドを実行します。二重引用符を使用する場合、date
コマンドは展開されますが、一重引用符が使用されている場合はdate
コマンドは実行されず、変数にそのまま保存されます。
$ which_year="I am in year : $(date +%Y)" $ echo ${which_year} I am in year : 2021
$ which_year='I am in year : $(date +%Y)' $ echo ${which_year} I am in year : $(date +%Y)'

7。変数の削除
unset
を使用して変数を削除できます 指図。
Unset
コマンドは、変数と関数の値と属性を削除します。
unset
のいずれかを使用できます -v
を使用 変数または単にunset
を指すフラグ デフォルトで最初に変数定義をチェックして設定を解除するコマンド。
$ echo ${which_year}
$ unset -v which_year (or) unset which_year
$ echo ${which_year}

詳細については、unset
を参照してください。 コマンドヘルプセクション。
$ unset --help
8。読み取り専用変数
読み取り専用状態とは、一度作成された値を変更したり、変数を削除したりできないことを意味します。読み取り専用変数を作成する方法は2つあります。
bash組み込みのreadonly
を使用する 読み取り専用変数を作成します。
$ readonly var1="This is a readonly variable"
または、declare
を使用することもできます -r
を使用したコマンド フラグ。
$ declare -r var2="This is a readonly variable too"
readonly
を再割り当てまたは設定解除することはできません 変数値の場合、エラーがスローされます。
$ var2="Reassigning with new value" bash: var2: readonly variable
$ unset var1 bash: unset: var1: cannot unset: readonly variable

9。 Bashの組み込みの特殊変数
Bashには、特定の結果を格納するための専用の特別な組み込み変数がいくつかあります。以下の変数のリストを見てください。
$? = Stores exit status of last ran the command. $$ = Stores process ID for your bash session. $0 = Script name. $1 .. $9 = Arguments passed to the script. $# = Count the length of values [email protected], $* = Stores array of all values.
9.1。終了ステータス($?)
実行するすべてのLinuxコマンドには、(0-255)からの関連する終了コードがあります。ゼロは成功を示し、残りは別の意味での失敗を示します。
$ whoami
$ echo $?
0
$ asdf # WRONG COMMAND
$ echo $?
127

9.2。プロセスID($$)
$$
を使用する 演算子、bashプロセスIDを取得できます。ターミナルから実行すると、現在のセッションのプロセスIDが表示されます。
$ echo $$ 195777 # PROCESS ID OF MY CURRENT TERMINAL SESSION

9.3。スクリプト名と引数($ 0- $ 9)
引数はスクリプトに渡すことができ、日常生活ですでに引数を使用している可能性があります。 id
を見てください 引数としてユーザー名を受け入れるコマンド。
$ id karthick
uid=1000(karthick) gid=1000(karthick) groups=1000(karthick),4(adm),27(sudo),119(lpadmin),998(docker)
同様に、引数を受け入れるスクリプトを作成できます。サンプルのシェルスクリプトを作成し、その中に次のスニペットをコピーして貼り付けます。
cat > main.sh #!/bin/bash echo "+ script_name=$0 " echo "+ first_argument=$1 " echo "+ second_argument=$2 " echo "+ third_argument=$3 "
次に、スクリプトを実行して引数を渡します。引数として1から3を渡します。 $0
絶対パスと$1
を渡したので、絶対パスでスクリプト名を取得します $3
へ 渡されたそれぞれの引数が割り当てられます。
$ /home/karthick/main.sh 1 2 3 + script_name=/home/karthick/main.sh + first_argument=1 + second_argument=2 + third_argument=3

9.4。値の長さ($#)
$#
を使用する 、渡された引数の総数を計算したり、任意の値の長さをカウントしたりできます。以下の例を見てください。変数名の前に#
を付けます 実際の値の代わりに値の長さを出力します。
$ site_name="OSTechnix"
$ echo ${#site_name}
9

10。可変スコープ
変数のスコープを理解することが重要です。ターミナルまたはシェルスクリプトを使用して変数を作成すると、その変数はバインドされ、そのセッションでのみ使用できます。ローカル変数として言うこともできます。他のセッションから変数にアクセスしようとすると、変数は使用できなくなります。
下の画像を見てください。何が起こるかをよく理解できます。
- 変数を作成する
site_name="OSTechnix"
現在のシェルから変数にアクセスします。 -
$$ variable
を使用します 現在のセッションを確認します。 -
"bash"
と入力して、新しいbashセッションを作成します 。 - 変数
site_name
にアクセスしてみてください このセッションから。 bashのデフォルトの動作である空の出力が得られます。 -
"Exit"
と入力して、新しいセッションを終了します 変数にアクセスしてみると、変数にアクセスできるようになります。

任意のセッションから変数にグローバルにアクセスする場合は、export
を使用する必要があります 現在のセッションから作成されたすべての子セッション/プロセスで変数にアクセスできるようにするコマンド。
$ site_name="OSTechnix"
$ export site_name
または
$ export site_name="OSTechnix"
$ bash
$ echo ${site_name}

"export"
と入力すると、エクスポートする変数のリストを取得できます。 ターミナルから。環境変数リストとユーザー定義変数リストの両方を取得します。
$ export

11。環境変数
これまで、ユーザー定義変数を操作する方法を見てきました。導入セクションでは、bashが環境変数をサポートしていることを説明しました。この変数のセットは、bashセッションを開始するとロードされ、bashによって維持されます。これらの環境変数は、動作を決定するためにアプリケーションによって使用されます。
たとえば、 nano crontabを編集するためのデフォルトのエディタとして設定されています 。 Vimを使用したい場合 nanoの代わりに、 EDITOR envを設定できます variableとcrontabは、この環境変数をチェックして使用します。
$ export EDITOR="vim"
$ crontab -e
ヘッズアップ: 変数は現在のセッションにのみバインドされます。永続的にしたい場合は、~/.bashrc
に配置する必要があります または~/.bash_profile
。
"printenv"
を実行すると、環境変数のリストを取得できます。 指図。環境変数が大文字で定義されていることがわかります。
$ printenv

printenvコマンドを使用して、特定の環境変数にアクセスすることもできます。以下は、遭遇する一般的な環境変数の一部です。
$ printenv USER # PRINTS USER NAME
karthick
$ printenv HOME # USER HOME DIRECTORY LOCATION
/home/karthick
$ printenv PWD # PRESSENT WORKING DIRECTORY
/home/karthick
$ printenv SHELL # WHICH SHELL I AM USING NOW
/bin/bash
$ printenv PATH # PATH WHICH IS USED BY BASH TO CHECK AND RUN COMMANDS
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

結論
このBash変数ガイドでは、変数についての簡単な紹介と、それぞれのセクションでの作成、アクセス、変更、および設定解除の方法から始めました。そして、ユーザー定義変数と環境変数の違いを確認しました。 Bashをよく理解できるように、セッションに読み込まれる環境変数のリストを調べてみてください。
関連記事:
- Bashスクリプティング–例で説明されているForループ
- Bashスクリプティング–ループの説明中およびループまで
- Bashスクリプト–例で説明されている関数
- Linuxの例で説明されているBashEchoコマンド
- 初心者向けのBashヒアドキュメントチュートリアル
- 例を使用して説明されたBashリダイレクト
- エクスポートがある場合とない場合のBash変数の定義の違い