1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェル変数の説明

2022-02-09 17:15:47

1. はじめに

変数は、あらゆるプログラミング言語において不可欠なものであり、あらゆる種類のデータを格納するために使用されます。スクリプト言語では通常、変数を定義する際に型を指定する必要はなく、ただ値を代入するだけであり、シェル変数もこの規則に従います。

Bashシェルでは、すべての変数の値は文字列であり、引用符で囲んで代入してもしなくても、値は文字列として格納されます。つまり、Bashシェルはデフォルトで変数の型を区別しておらず、変数に整数や小数を代入しても、多くのプログラミング言語とは異なり、文字列として扱われるのです。C/C++のように、変数は整数、浮動小数点数、文字列、ブーリアン、その他多くの型に分類される。もちろん、必要であればシェル組み込みコマンドの declare/typeset を使って明示的に変数の型を定義することもできますが、一般的にはその必要はなく、シェル開発者は自分のコードを書くときに値の型に気をつければいいだけです。

2. 変数の種類

シェル変数は、そのスコープとライフサイクルにより、シェル内で大きく4つに分類されます。

(1) 恒久的な環境変数:設定ファイルの変更が必要で、変数は恒久的に有効となる。

(2) 一時的な環境変数:exportコマンドラインを使用して宣言することができ、変数はシェルスクリプトのプロセスが終了した後も有効ですが、現在のシェルセッションが閉じられた後に失効します。

(3) グローバル変数:スクリプト内で定義され、現在のシェルスクリプト内でのみ有効で、他のシェルスクリプトのプロセスからはアクセスできず、スコープは定義された場所から始まり、スクリプトが終了するか削除が示された場所で終了するものである。グローバル変数は、シェル関数の内部でも外部でも定義できることに注意してください。シェル関数の内部で定義された変数は、デフォルトでグローバルとなり、そのスコープは、関数が呼び出されたときに変数が定義された場所"から始まり、スクリプトが終了するか削除されていることが示されている場所で終了します。

#! /bin/bash

globalVar=dablelv #globalvariables

(4) ローカル変数。localキーワードで定義された変数は、シェルスクリプト内の関数内に表示されます。そのスコープは関数内に限定されます。同じ名前のローカル変数は、グローバル変数をブロックします。

#! /bin/bash

function test()
{
	local localVar=dablelv # local variables
}
test
echo $localVar # output is empty

3. 変数の定義

シェルは、以下の3つの変数定義方法をサポートしています。

var=value
var='value'
var="value"

varは変数名、valueはその変数に代入される値です。valueに空白文字(スペース、タブなど)が含まれていない場合は、引用符で囲まないでそのままでよい。valueに空白文字が含まれている場合は、引用符で囲む必要がある。また、一重引用符を使うか二重引用符を使うかの違いもありますが、それは後で詳しく説明します。なお、代入番号は空白で囲むことができませんが、これはおそらく皆さんが慣れ親しんでいるほとんどのプログラミング言語とは異なるものでしょう。

シェル変数の命名規則は、ほとんどのプログラミング言語と同じように
(1) 変数名は数字、英字、アンダースコアで構成される。
(2) 文字またはアンダースコアで始まること。
(3) シェルからのキーワードは使用できません(helpコマンドで予約キーワードを見ることができます)。

変数の定義例です。

name='dablelv'
home="Anhui"
age=28

4. 変数へのアクセス

定義された変数を使用するには、変数名の前にドル記号の$を付けるだけです。

name="dablelv"
echo $name
echo ${name}

変数名の外側にある大括弧{}は任意で、付けても付けなくてもよい。以下の場合のように、インタプリタが変数の境界を認識しやすくするために追加される。

skill="Java"
echo "I am good at ${skill}Script"

スキル変数に括弧をつけないと、インタープリタは $skillScript を変数として使用すると、コードが期待通りに実行されません。

すべての変数に大括弧 { } を付けることを推奨するのは、プログラミングの良い習慣です。

5. 変数の値を変更する

など、定義済みで再割り当てが可能な変数。

name='dablelv'
echo $name
name="billwong"

2回目に変数に値を代入するときは、変数名の前に追加することはできません。変数を使用するときだけ、値を追加してください。

6. シングルクォートとダブルクォートの違いについて

変数を定義するとき、変数の値をシングルクォートで囲む場合とダブルクォートで囲む場合がありますが、どのような違いがあるのでしょうか?次のコードを例にとって考えてみましょう。

#! /bin/bash

name='dablelv'
str1='My name is ${name}'
str2="My name is ${name}"
echo $str1
echo $str2

結果を実行します。

私の名前は${name}です。
私の名前はdablelvです

変数の値をシングルクォートで囲むと、シングルクォートの中にあるものはすべて出力され、たとえコンテンツの中に変数やコマンドがあっても(コマンドは反転させないと発生しない)そのまま出力されます。この方法は、定義が純粋な文字列を表示する場合、つまり、変数やコマンドなどを解析したくない場合に適しています。

変数の値をダブルクォートで囲む場合、ダブルクォート内の変数名とコマンドをそのまま出力するのではなく、まず中の変数とコマンドを解析して出力します。この方法は、文字列に変数やコマンドが付加されている変数定義で、それらをパースしてから出力したい場合に適しています。

推奨します。変数が数値の場合は、引用符を付けずにそのまま出力します。どうしてもそのまま出力する必要がある場合は、シングルクォートを付けます。特に必要のないその他の文字列などは、変数定義の際に最も一般的な使用シナリオであるダブルクォートを使用した方がよいでしょう。

7. コマンドの結果を変数に代入する

シェルは、コマンドの実行結果を変数に代入することもサポートしており、一般的に2つの方法で代入することができます。

variable=`command`
variable=$(command)

最初の方法では、コマンドをバッククォートで囲みますが、これはシングルクォートと非常に似ており、混乱する可能性があるので、これは推奨されません。 $() 2つ目の方法は、コマンドを

For example, assigning two values to a variable by adding them together.
var1=1
var2=2
varAdd1=`expr $var1 + $var2`
varAdd2=$(expr $var1 + $var2)

8. Read-only variables
Use the readonly command, or use the
declare -r
or
typeset -r
Variables can be defined as read-only variables, and the value of a read-only variable cannot be changed.
name="dablelv"
readonly name

declare -r name="dablelv"

typeset -r name="dablelv"

9. Delete variables
Variables can be deleted using the unset built-in command. Syntax.
unset variable_name

The unset command cannot delete read-only variables. Variables cannot be used again after they have been deleted. For example
#! /bin/bash

name="dablelv"
unset name
echo $name

The above script does not have any output.
The above is a detailed explanation of shell variables, for more information about shell variables, please follow other related articles in the Script House!

var1=1
var2=2
varAdd1=`expr $var1 + $var2`
varAdd2=$(expr $var1 + $var2)

unset variable_name

unset variable_name


The unset command cannot delete read-only variables. Variables cannot be used again after they have been deleted. For example

#! /bin/bash

name="dablelv"
unset name
echo $name


The above script does not have any output.


The above is a detailed explanation of shell variables, for more information about shell variables, please follow other related articles in the Script House!