5.5 Bashでの変数の使用

シェル変数は、グローバル変数またはローカル変数として使用できます。グローバル変数(つまり、環境変数)は、すべてのシェルでアクセスできます。対照的に、ローカル変数は、現在のシェルでのみアクセスできます。

すべての環境変数を表示するには、printenvコマンドを使用します。特別な変数が必要な場合は、変数名を引数として挿入してます

printenv PATH

変数は、echoコマンドでも表示できます。

echo $PATH

この例では、PATH変数をプリントします。ローカル変数を設定するには、変数名の後に等号を入れ、その後に値を指定します。

PROJECT="SLED"

等号の前後にスペースを挿入しないでください。スペースを挿入すると、エラーになります。環境変数を設定するには、exportを使用します。

export NAME="tux"

変数を削除するには、unsetをしようします。

unset NAME

次のテーブルに、シェルスクリプトで使用できる共通環境変数を示します。

表 5-5 便利な環境変数

HOME

現在のユーザのホームディレクトリ

HOST

現在のホスト名

LANG

ツールをローカライズする場合、ツールは、この環境変数からの言語を使用します。英語をCに設定することも可能です。

PATH

シェルのサーチパス。コロンで区切ったディレクトリのリストを含みます。

PS1

各コマンドの前にプリントされる通常のプロンプトを指定します。

PS2

複数行コマンドの実行時にプリントされるセカンダリプロンプトを指定します。

PWD

現在の作業ディレクトリ

ユーザ

現在のユーザ

5.5.1 引数変数の使用

たとえば、スクリプトfoo.shは、次のように実行できます。

foo.sh "Tux Penguin" 2000 

スクリプトに渡される引数すべてにアクセスするには、位置パラメータが必要です。これらのパラメータは、最初の引数には$1、2つ目の引数には$2という順序で割り当てます。パラメータは最大9つまで使用できます。スクリプト名を取得するには、$0を使用します。

次のスクリプトfoo.shは、1から4までのすべての引数をプリントします。

#!/bin/sh
echo \"$1\" \"$2\" \"$3\" \"$4\"

このスクリプトを既出例の引数を使用して実行すると、次の結果が出力されます。

"Tux Penguin" "2000" "" ""

5.5.2 変数置換の使用

変数置換では、変数のコンテンツに、左側または右側からパターンを適用します。次のリストに、可能な構文形式を示します。

${VAR#pattern}

左側から最も短い一致を削除します。

file=/home/tux/book/book.tar.bz2
echo ${file#*/}
home/tux/book/book.tar.bz2
${VAR##pattern}

左側から最も長い一致を削除します。

file=/home/tux/book/book.tar.bz2
echo ${file##*/}
book.tar.bz2
${VAR%pattern}

右側から最も短い一致を削除します。

file=/home/tux/book/book.tar.bz2
echo ${file%.*}
/home/tux/book/book.tar
${VAR%%pattern}

右側から最も長い一致を削除します。

file=/home/tux/book/book.tar.bz2
echo ${file%%.*}
/home/tux/book/book