CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は、findとxargsを組み合わせた方法をについて説明しました。 今回は、シェルを使う際にかならず使うと言っていい、シェル変数について説明しようと思います。
シェル変数とはシェルが持っている機能の一つです。変数名で示されるシェル変数に値を代入したり、代入した値を表示することが出来ます。以下の例では、「AAA」が変数名、「aaa」がシェル変数に格納された値となります。
$ AAA=aaa
シェル変数に格納された値を表示、使用するためには「$変数名」や「${変数名}」のようにする必要があります。以下では、シェル変数AAAへ格納された値をechoで標準出力に出力しています。
$ echo $AAA
aaa
$ echo ${ABC}abc
aaaabc
このように、シェル変数をコマンドの引数に使用することが出来ます。シェル変数に続けて文字列を使用するような場合、「${変数名}」の形式を使いましょう。 気をつけなければいけないのは、空白や特殊な文字列を含む場合です。その場合、「''」や「""」で括ること設定が可能です。
$ BBB=' abc def'
$ CCC=" abc def"
$ echo $BBB$CCC
abc def abc def
では、「''」と「""」で括る場合の違いは何でしょうか? それは、シェル変数を展開できるかの違いです。
$ BBB=' abc $AAA'
$ CCC=" abc $AAA"
$ echo $BBB$CCC
abc $AAA abc aaa
上記の場合、シェル変数「BBB」には「abc $AAA」という値が入り、「CCC」には「abc aaa」という値が格納されます。「""」では中に含まれる変数が展開して格納されます。
シェル変数には、大文字小文字のアルファベット、数字、「_」(アンダースコア)が使用可能です。ただし、数字で始まる変数名は使用できません。また、後ほど説明する予約済みの変数もあるので注意が必要です。
以下のように AAA=とした場合、変数AAAに空値が入ることになり、変数自体を削除したことになりません。
$ AAA=
$ set|grep AAA
AAA=
BBB=' abc $AAA'
setコマンド単独で使用すると、設定済みのシェル変数・シェル関数(後日、説明します)が表示されますが、AAA自体は設定されていないことが分かります。unset を使用するとシェル変数を削除することが出来ます。
$ unset AAA=
$ set | grep AAA
BBB=' abc $AAA'
bashには、以下のような特殊パラメータがあります。この特殊パラメータには値を代入することが出来ないため、シェル変数とは異なります。$特殊文字で以下の項目が展開されます。
文字 | 説明 |
---|---|
0 | シェルまたはシェルスクリプトの名前 |
1以上の数値 | コマンドの引数の数字番目の文字列(位置パラメータという)<br />2桁以上の数値を展開するには${10}のように使用 |
* | 1以上のすべての位置パラメータ<br />「"$*"」としたときは、"$1c$2c$3"のように展開される(cはIFS文字) |
@ | 1以上のすべての位置パラメータ<br />「"$@"」としたときは、"$1" "$2" "$3"のように展開される |
# | 位置パラメータの数(=引数の数)を10進数で展開する |
? | 最後に実行されたコマンドの終了ステータス |
-(ハイフン) | 最後のオプションフラグ(-で始まる文字列) |
$ | 実行シェルのプロセスID |
! | 最後に実行されたバックグラウンドプロセスのプロセスID |
_(アンダースコア) | 実行するシェルまたはシェルスクリプトの絶対パス名 |
プロセスIDは、実行中のコマンド(=プロセス)に紐づくIDで、OS内で一意な数字です。プロセスIDの詳細は、バックグラウンドプロセス、シェルスクリプト含め、後日説明します。
bashは幾つかのシェル変数を独自に使用しています。以下、一部を紹介します。
シェル変数 | 説明 |
---|---|
BASH | 現在実行しているbashを起動する時に使われた完全なファイル名 |
BASHPID | 現在のbashのプロセスID |
BASH_VERSION | 現在実行しているbashのバージョン |
HOME | ユーザのホームディレクトリ |
HOSTNAME | ホスト名 |
HOSTTYPE | bash を実行するマシンの種類(x86_64など) |
IFS | 内部フィールドの区切り文字(デフォルトは空白「 」) |
PATH | コマンドの検索PATH<br />ディレクトリ名を「:」で区切って列記する<br />bashは、このディレクトリ内からコマンドを検索し、実行できる |
PWD | 現在の作業ディレクトリ |
SHELL | シェルのフルパス |
UID | ユーサID |
その他にも定義済みのシェル変数がありますが、これらについては次回紹介したいと思います。 次回をお楽しみにお待ち下さい。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes