2021-02-23
- シェル変数の名前には、アルファベット、数字、アンダースコアを使うことができます。
- アルファベットの大文字小文字は区別されます。
- シェル変数名はアルファベットの大文字を使うことが慣例となっています。
- 変数にセットされる値はすべて文字列として処理されます。
- 変数に値をセットするときは
=
を使います。(=
の両脇にスペースをいれない。)
- シェル変数は使用する前に特別に宣言する必要はない。
シェル変数名の頭に$
を付けると、シェル変数が利用できます。
変数名を{}
で囲むこともできます。
$
や{}
は、シェル変数としては取り扱われず、これが変数であることを示すために
使われます。
変数名の連結
中括弧を使うと、この部分がシェル変数だと明示的に指定できます。
シェル変数で利用できない文字が前後にある場合は、そのシェル変数を区切るものとして判断されます。
中括弧が絶対に必要というわけでもないです。
ドット(.)は変数名に使用できないため、シェル変数を区切るものと解釈され、
mainという文字列に変換されます。
sedコマンド等のクォーテーションの中に変数を含めたい場合には、ダブルクォーテーションを利用します。
file
の中のabc
という文字をdef
に置き換えてnewfile
に書き出します。
この様に書くことで、値が何も無い変数を定義しています。
シェル変数をセットし、それを利用する際の最も基本的な例です。
もっと柔軟に値を設定することができ以下の
4通りの方法があります。
:
があれば、この変数がこれまで未使用(初めて登場した場合)かヌル値がセットされているときに、
後半(: 以後)の処理を行います。:
がなければ、変数がこれまで未使用の場合に限って処理します。
=
によるシェル変数の設定
変数(variable)を展開しようとするときに、
これまで未使用かヌル値であればvalueを代入します。
:がない場合は、ヌルが入っている場合にも既存の値のままとなります。
-
によるシェル変数の設定
-
を使うと、=
をつかたときと微妙に異なり、
変数が未使用、未設定の状態のときに、値を代入しないまま、指定した値を
そのまま代入します。
$1に何らかの値がセットされていれば、そのままそれを使います。
$1に値がセットされていないかヌルならabcという結果を返します。
$iの値は代入されないためそのままです。
変数が書き込み禁止であっても置き換えて使用している様に見えます。
?
によるシェル変数の設定
?
は、変数がこれまで未使用、未設定であるかどうかを確認するときに使います。
未使用、未設定のときにmessageの部分が表示され処理が終了します。
+
によるシェル変数の設定
値が設定されている場合は、変数の値を変更せずに、そのときだけ結果を変えます。(-
と同じ)
未使用未設定の場合には値が設定されません。(-
のときと逆)
- 渡した引数が順番に、$1〜$9までの変数にセットされる。
- $0は実行したコマンド自身を表す。
- 位置パラメタは$9までで、$10以上はない。
- 書き込み禁止である。
shiftというコマンドを使うと、$1から$9の位置パラメタをずらす事ができます。
引数の数を表す
引数全体を表現する
引数全体を表現するには、$*
と$@
という書き方があります。
$?
、$$
、$!
、$-
という特殊な変数があります。
$?
変数
コマンド実行時の終了ステータスを表す関数です。
$$
変数
現在動作しているコマンドのプロセスIDがセットされます。
$!
変数
&
を使ってコマンドをバックグラウンドで走らせたときのコマンドのプロセスIDがこの$!
にセットされます。
$-
変数
シェルの起動時のフラグや、setコマンドを使って設定したフラグの一覧がセットされています。
そのコマンドだけ有効になるように変数を設定することができます。
CFLAGSという変数に-g
という値をセットし、この値を設定した状態でmakeコマンドが実行されます。
変数の設定は、そのコマンドと同じ行に、コマンドの直前で行います。セミコロンを使って区切ってはいけません。
以下と同義となります。
セットした変数が他のコマンドに影響を与えないように中括弧で囲みます。
CFLAGSという変数をセットして、exportコマンドでその変数をほかのプロセスでも使えるようにしています。