シェルスクリプトの特殊変数について

はじめに

こんにちは!TechBull 運営メンバーでインフラエンジニアの相川(@riv_infra)です。シェルスクリプトを読んでいて特殊変数が出てきた際にあまり馴染みがないなと感じました。そこで、特殊変数について調べて自分なりにまとめてみたことをブログにしました。初学者向けの基本的な部分からおさらいしていきたいと思います。


変数とは

変数という概念はプログラミング言語だったり、シェルにおいて利用されます。変数とは、名前(変数名)のついた箱に物(値)を入れるたとえや、物(値)にラベル(変数名)をつけるといった例えをよくされます。変数には、文字列や数値、配列など様々な型のデータを代入することができます。

シェルにおいて、変数は3種類に分かれます。

種類 変数名 説明
シェル変数 英数字とアンダースコア(_) Exportすると環境変数になる
位置変数(位置パラメータ) 数字(0を除く) 引数の受け渡しに利用
特殊変数(特殊パラメータ) 記号または0 終了ステータスなど属性値を取得

【参考】 [改訂第4版]シェルスクリプト基本リファレンス 技術評論社

この中でもよく使われるのは、シェル変数になります。$HOMEや$PATHなどと聞くと初学者の方も見たことがあるのではないでしょうか。


特殊変数の例

特殊変数のいくつかの例を表にまとめてみました。直前のコマンドの終了ステータスを取得できる$?などは使われているのを見たことがあります。$@と$*は少し違いがあり、$@は全ての引数をそのまま別々で受け渡せますが、$*はそれぞれの引数が半角空白で区切られた一つの文字列として受け渡されます。そのため、$@の方が使う機会が多そうなため、注意が必要です。

変数 説明
$0 実行されたスクリプト名
$$ 実行されたスクリプトのプロセスID
$? 直前のコマンドの終了ステータス
$# スクリプトに渡された引数の数
$1,$2, … $1:第一引数 $2:第二引数 …
$@ すべての引数 (“$1” “$2” … のように展開される)
$* すべての引数 (`”$1 $2 …” のように展開される)
$_ 直前のコマンドの最後の引数

特殊変数に親しむ

特殊変数の例とその説明についてご覧いただきましたが、読むだけだと身につきづらいと思います。完全に覚える必要はないと思いますが、何かを実現したい際に「特殊変数を使えば出来そうだ」というとっかかりになるくらいには親しんでおけると良いかなと思います。そこで、思いつきでクイズを作ってみました。シェルスクリプトになっているので、興味のある方は是非お試し頂けると嬉しいです。

試して頂ける方は、引数を色々変えてみたり、何回か繰り返してどんな意味だったか思い出すということをしてみるとよいかもですね!


まとめ

今後も工夫して楽しく学んでいくことが出来ればいいなと思います!また、急な宣伝となりますが3/15にLT大会を実施予定です!!是非ご参加ください!

https://techbull.connpass.com/event/345494/

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール