変数
値を保存して名前で呼び出せるようにしたものが変数。
シェルスクリプトでは、変数には文字列のみを設定することができる。
数も文字列として保存される。
変数の定義、代入
code:set_variable.sh
変数名=値
=の前後に空白は許されない。
値として空白を入れたい場合はクォートする。
code:example_blank.sh
X=' Hello, world! '
printf '%s\n' "$X"
Hello, world!
変数名=値 の次に名前を書くと、それはその時だけ環境変数を定義したコマンド実行になる。
X=A command
X=A という環境変数定義をした上で command を実行
このため、以下のように "A B"のつもりで書いてもそうならない。
X=A B
空白を含む場合、必ず、以下のようにくくる
X="A B"
変数を未定義にする
code:unset.sh
unset 変数名
変数には以下の2つがある。
シェル変数
環境変数
何がどう違うのか?
シェル変数は、現在のシェルとサブシェルまでしか伝わらない。呼び出すコマンドには伝わらない。
環境変数は、呼び出すコマンドにまで伝わる。
シェル変数も環境変数も、呼び出した側のプログラムには変化を伝えることはできない。
export コマンドを使うと、シェル変数を環境変数にすることができる。
シェル変数を環境変数に格上げする
$ export 変数名
定義と同時に環境変数にする事ができる。
$ export 変数名=値
環境変数をシェル変数に格下げする
$ export -n 変数名
変数が未定義または空の時にエラーにする
VAR=${VAR:?VAR is required.}
変数が未定義の時にエラーにする
VAR=${VAR?VAR is required.}
定義されている場合には、その値が返ってきてしまうので、自分自身に代入するのがもっとも影響が少ない
失敗時にはその行自体が失敗するので、変数は定義されないままになる。
変数が未定義または空の時に処理を行う
参考:パラメータ展開
code:if_undef.sh
if ! "${VAR:+x}" ; then
# do something
fi
"${VAR:+x}" || do_something
変数が未定義の時に処理を行う
code:if_undef_or_empty.sh
if ! "${VAR+x}" ; then
# do something
fi
"${VAR+x}" || do_something
変数の括り方