シェルスクリプトで「$」はよく出てきますが、どういう意味なのかわからないと言った事はないでしょうか?
シェルスクリプトで「$」はよく出てきますが、どういう意味なのかわりません。詳しくまとめれる人いないかな?
そういった疑問に答えます。
今回はシェルスクリプトでの「$」の意味をまとめていきます。
またそれぞれの使い方の実例も交えて説明するので、初心者でもわかりやすくなっています。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
シェルスクリプトで「$」の意味を解説
シェルスクリプトで「$」の意味は以下です。
- 変数を展開
- 引数を展開
- 配列を展開
- コマンド実行
- その他の展開
- 正規表現の最後の文字
1つずつ順番に説明します。
変数を展開するのに「$」を使用する
シェルスクリプトで「$」が一番使用されるのが、変数展開するという意味です。
変数を文字列を展開してみる
変数を設定して使用する時に使います。以下のシェルスクリプトを見て下さい。
#!bin/bash
a=dollar-mean
echo $a
「a」という変数に文字列を入れています。
「echo」で変数に入っている文字列を表示しています。
[root@localhost workspace]# bash dollar-mean.sh
dollar-mean
実行すると変数「a」が展開されて「dollar-mean」という文字列が表示されています。
シェルスクリプトを実行する為のコマンドについては様々ありますが、以下の記事で纏めています。
変数の文字数を数えてみる
その他にシェルスクリプトで「$」を使用して変数を扱うものに、変数の文字列の文字数を数えるというものがあります。
#!bin/bash
a=dollar-mean
echo 変数の文字数は「dollar-mean」で${#a}文字になります
変数を指定して、その文字列の数を「${#変数}」で展開できます。
[root@localhost workspace]# bash dollar-mean.sh
変数の文字数は「dollar-mean」で11文字になります
「${#変数}」の部分が「dollar-mean」の文字数の「11」に展開されています。
引数を展開するのに「$」を使用する
シェルスクリプトを実行する時の引数を展開する事も可能です。
引数の文字列を展開してみる
以下のシェルスクリプトを見て下さい。
#!bin/bash
echo 1番目の引数は$1
echo 2番目の引数は$2
echo シェルスクリプトのファイル名は$0
「$1」は引数の1番目を展開します。「$数字」は引数の数字番目を展開します。
「$0」ではファイル名を展開出来ます。
ではこのシェルスクリプトに「aaa」と「bbb」という引数を指定して実行します。
[root@localhost workspace]# bash dollar-mean.sh aaa bbb
1番目の引数はaaa
2番目の引数はbbb
シェルスクリプトのファイル名はdollar-mean.sh
「$1」は引数の1番目を展開、「$2」は引数の2番目を、「$0」でシェルスクリプトのファイル名を展開できています。
引数の数を数えてみる
引数の数も数える事が可能です。
#!bin/bash
echo 引数の数は$#
「$#」を指定する事により引数の数を数える事が可能です。
シェルスクリプトのファイル名の後に「aaa」「bbb」を引数として実行してみます。
[root@localhost workspace]# bash dollar-mean.sh aaa bbb
引数の数は2
「$#」に引数の数の「2」が展開されています。
引数の全てを展開してみる
また引数の全てを展開する事も可能です。
#!bin/bash
echo 引数の全ては$@
「$@」と指定する事で引数の全てを展開する事が可能です。
[root@localhost workspace]# bash dollar-mean.sh aaa bbb
引数の全てはaaa bbb
「$@」に引数の全ての「aaa bbb」が展開されています。
配列の展開をするのに「$」を使用する
変数だけではなく配列の展開も行う事が可能です。
配列の中身を展開する
「${配列名[番号]}」と指定する事で、配列の左から指定した番号の中身を展開する事が可能です。
#!bin/bash
allay=(a b c d e f)
echo 配列の3番目は${allay[2]}
「allay」という配列に「a」から「f」までをいれています。
「${配列名[番号]}」の配列名に「allay」、番号に「2」をいれています。
[root@localhost workspace]# bash dollar-mean.sh
配列の3番目はc
${allay[2]}に3番目の「c」が展開されています。
コマンドを実行してするのに「$」を使用する
コマンドを実行した結果を展開する事が可能です。
コマンドを実行した結果を展開するには「$(コマンド)」を使用します。
#!bin/bash
echo 時刻は$(date)
今回は時刻を表示する「date」コマンドを展開します。
[root@localhost workspace]# bash dollar-mean.sh
時刻は2023年 4月 12日 水曜日 22:45:40 JST
「$(date)」が時刻に展開されています。
その他の展開で「$」を使用する
その他に展開できるものをご紹介しておきます。
直前のステータスを「$?」で展開してみる
#!/bin/bash
echo success
echo 直前のステータスは$?
aaa
echo 直前のステータスは$?
1つ目は「echo」で文字を表示させます。2つ目は存在しない「aaa」というコマンドを実行しようとします。
[root@localhost workspace]# bash dollar-mean.sh
success
直前のステータスは0
dollar-mean.sh: 行 4: aaa: コマンドが見つかりません
直前のステータスは127
1つ目は「success」と表示できましたので、直前のステータス「$?」が「0」になっています。
2つ目は「aaa」というコマンドがないという事で、直前のステータス「$?」が「127」になっています。
現在のプロセスIDを「$$」で展開してみる
現在のプロセスIDを「$$」で展開可能です。
#!bin/bash
echo 現在のプロセスIDは$$
シェルスクリプトを実行してみます。
[root@localhost workspace]# bash dollar-mean.sh
現在のプロセスIDは2862
プロセスIDの「$$」が「2862」に展開されています。
正規表現で「$」を使用する
正規表現でも「$」を使用できます。
行の最後の文字を表す文字が「$」になります。
#!bin/bash
for i in "$@"
do
if [[ $i =~ [a-z][a-z]*b$ ]]; then
echo "${i}"
fi
done
シェルスクリプトに「aaa」「bbb」を引数として実行します。
すべての引数の「$@」を「for」コマンドで繰り返します。
「if」とテストコマンドで引数が「aからzまでのどれか」の文字列で最後が「b」で終わるものがあれば表示するようにします。
最後の「b$」により文字列の最後が「b」である事を意味します。
[root@localhost workspace]# bash dollar-mean.sh aaa bbb
bbb
文字の最後が「b」の「bbb」のみ展開されている事を確認できました。
シェルスクリプトで「$」の意味を解説のまとめ
シェルスクリプトでは「$」の意味は以下です。
- 変数を展開
- 引数を展開
- 配列を展開
- コマンド実行
- その他の展開
- 正規表現の最後の文字
本日実演した「$」の使い方を以下にまとめてみました。
$の使い方 | 種別 | 意味 |
---|---|---|
$変数 | 変数 | 変数の文字列を展開 |
${#変数} | 変数 | 変数の文字数を展開 |
$数字 | 引数 | 引数のn番目の文字列を展開 |
$0 | 引数 | ファイル名を展開 |
$# | 引数 | 引数の個数を展開 |
$@ | 引数 | 引数の全ての文字列を展開 |
${配列名[数字]} | 配列 | 配列の中身の展開 |
$(コマンド) | コマンド | コマンドの結果を文字列で展開 |
$? | その他 | 直前のステータスを展開 |
$$ | その他 | 現在のプロセスIDを展開 |
最後の文字$ | 正規表現 | 最後の文字の決定 |
シェルスクリプトで「$」はかなり使用しますので、意味をしっかり理解しておく必要があります。