Unixシェル変数

シェルはシェル変数という名前と値のペアを保持する機能を持っています。

(実習)以下のコマンドを実行し、結果を解釈せよ。
$ a=fufufunofu
$ echo $a
$ b = fufufunofu
このように、変数を定義し代入する際に等号の前後に空白を入れてはいけない。また、変数は代入によって生成され変数名に$をつけた記号によって参照される。変数名は複数文字からなっていてもよい。

クォートの記号の働きが微妙に違うので、注意されたい。

(実習)上のコマンドに続き、次のコマンドを実行し、結果を解釈せよ。
$ echo "$a"
$ echo '$a'

いくつかのシェル変数には既に値が設定されている。

(実習)次のコマンドを実行し、結果を観察せよ。(setコマンドの出力を縦棒記号 | で表すパイプでlessコマンドにつないでいる。パイプについては後述)
$ set | less

setコマンドで表示されるのは、現在利用しているシェルが持っているシェル変数の一覧です。重要なものを見ておくと(setの出力を参照して確認しておくとよい)
  • USER: 利用者のユーザ名
  • UID: 利用者のユーザID
  • HOME: 利用者のホームディレクトリ
  • SHELL: 利用者が使っているシェル
  • PATH: コマンドを探すディレクトリのリスト
  • TERM: 端末の種類
  • PS1: プロンプト文字列
PATHはコマンドを探すディレクトリの名前を:でつないだリストの形をしています。実行可能ファイルはこのいずれかのディレクトリに入れておくことで、コマンドとしてファイル名を与えただけでシェルによって検索され実行されるようになるのです。同じ名前のファイルがある場合には、前の方にあるディレクトリの中にあるものが優先されます。
$ echo $PATH
で その内容を見ることができます。
存在するはずのコマンドが見つからないとき「パスが通ってないんじゃない?」などと言われたら、この方法でPATHを確認してください。

自分のホームディレクトリにコマンド用ディレクトリ(例えば~/bin)を作り、PATHに含めることで自分専用のコマンドを増やすことが可能になります。ただしこれには初期設定ファイルを使った方が便利なので、そこで説明します。

(実習)以下を試せ。
$ echo $PATH
$ export PATH=       # PATHを空にする
$ ls                   # 実行できる?
$ pwd                  # こちらは?違いは何?
$ PATH=/bin:/usr/bin
$ ls
 (続いて実習を行うためには、いったんシェルを終了し、新しくシェルを動かしなおすこと)

シェル変数を、シェル以外にそのシェルから起動した別のプログラムにも情報を渡せるようにしたものを環境変数と呼び、exportコマンドによって宣言します。詳しくはシェルスクリプトのところで扱います。環境変数はprintenvコマンドまたはenvコマンドによって参照できます。

(実習)次のコマンドを実行し、結果を観察せよ。
$ env
$ printenv

(参考文献)このページの記述は

久野靖『UNIXによる計算機科学入門』

を参考にしています。

Comments