シェルスクリプト変数

シェルスクリプト変数

シェルスクリプトでは、変数(文字列や数値などのデータを記憶しておくもの)を使用することができます。


変数の使用ルール

  • 変数名に使える文字は、英数字または「 _ 」(アンダーバー)です。
  • 変数名の大文字と小文字は区別されます
  • 先頭1文字目に数字は使えません。
  • 変数に値を代入するには「変数名=値」とします。
  • 「=」の前後にはスペースやタブを入れることはできません。
  • 変数を参照するには、変数名の前に「$」を付けます。

変数の代入と参照

変数に値を代入する際の「"」ダブルクォートの有無は、変数を参照する際には同じになります。

変数参照で文字列と変数を区別するためには、変数名を「{ }」で囲みます。

なお、変数に何も代入されていない場合は、空の文字列が返ってきます。



#!/bin/sh
# 変数に値を代入します
VAR1="string"
VAR2=string
VAR3="3"
VAR4=3
# 変数の値を表示します
echo $VAR1
echo ${VAR2}
echo "$VAR3"
echo "VAR4=${VAR4}"

実行結果は以下の通りです。


$ ./script.sh 
string
string
3
3

実行結果を変数に代入する

コマンドの結果を変数に格納する場合は、「` `」でコマンド部分を囲みます。


NOW_DATE=`date '+%Y-%m-%d'`
echo ${NOW_DATE}

シェルスクリプトの特殊変数

特殊変数一覧

シェルスクリプトでは、特別な意味を持つ変数が用意されています。

なお、特殊変数は参照専用であるため、値を代入することはできません。


$$ 自プロセス(シェル)のPID(プロセスID)
$! シェルが最後に実行したバックグラウンドプロセスのPID
$? 最後に実行したコマンドの終了コード(戻り値)
$* 全引数リスト。「"$*"」と記述すると、全引数を一つにまとめた文字列として展開します。つまり、「"$1 $2 … $n"」の形式で展開されます。
$@ 全引数リスト。「"$@"」と記述すると、それぞれの引数を個別にダブルクォートで囲んで展開します。つまり、「"$1" "$2" … "$n"」の形式で展開されます。
$# シェルに与えられた引数の個数
$0 第0引数です。シェルスクリプトのファイル名となります。
$1~$n シェルに与えられた引数の値。$1は第1引数、$2は第2引数…となります。
$- setコマンドを使って設定したフラグの一覧

IFS(Internal Field Separator)変数

IFS変数には、シェルがコマンドラインを走査するときの区切り文字のリストが格納されています。

区切り文字リストは、ホワイトスペース文字と呼ばれるスペース、タブ、改行文字が該当します。


IFSの内容を確認する場合、空白文字としてスペース、タブ、改行から成ってため「echo $IFS」としても表示できません。

例えば、IFSの値を8進数ダンプすることで、以下のように「040 011 012」が確認できます。


$ echo -n "$IFS" | od -b
0000000 040 011 012
0000003 

関連ページ