忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【ShellScript】シェル変数

基本

代入

HOGE='hoge'

参照

"$HOGE"
#あるいは
"${HOGE}"

注意点

  • 基本的に""(ダブルクォート)で囲む
    特殊文字などが解釈されないようにするため
  • {}は変数の区切りを表す
$ HOGE='hoge'
$ echo "$HOGEaaaaa" #HOGEaaaaaという変数と解釈されるが、定義していないため空文字が返される

$ echo "${HOGE}aaaaa" #{}によって変数名の区切りを明示している
hogeaaaaa

特別な変数

PATH

外部コマンドの検索パス

HOME

ホームディレクトリ

IFS

単語分割に用いられる区切り文字の設定

PS1 / PS2

プロンプトの設定

# 設定を参照
Makoto-Air:ex makoto$ echo $PS1
\h:\W \u\$
Makoto-Air:ex makoto$ echo $PS2
>
# 設定を変えてみる
Makoto-Air:ex PS1='\u@\h \W:\$ '
makoto@Makoto-Air ex:$ PS2='>>>'
makoto@Makoto-Air ex:$ for var in hoge fuga
>>>

プロンプトの設定に利用できる特殊文字

特殊文字 内容
\u ユーザ
\h ホスト
\W カレントディレクトリ

環境変数

変更

環境変数を設定後、exportコマンドを実行

$ HOGE='hoge'
$ printenv HOGE
# 変数を定義しただけでは環境変数には設定されない
$ export HOGE #新たに環境変数を追加する場合はexportが必要
$ printenv HOGE
hoge
# すでに定義されている環境変数については値を変えるだけでよい
$ printenv LANG
ja_JP.UTF-8
$ LANG=C
$ printenv LANG
C

一時的な変更

単純コマンドの前に環境変数の設定をする

例)

$ printenv LANG
ja_JP.UTF-8
$ date
20151225日 金曜日 064148秒 JST
# 環境変数LANGを変更してdateコマンドを実行
$ LANG=C date #言語をデフォルト(英語)に変更
Fri Dec 25 06:41:58 JST 2015
# 環境変数の確認
$ printenv LANG
ja_JP.UTF-8 #変わっていない
# 2つ以上の変更も可能
$ LANG=C TZ=UTC date #言語をデフォルト(英語)、タイムゾーンをUTCに変更
Thu Dec 24 21:47:28 UTC 2015