読者です 読者をやめる 読者になる 読者になる

計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

シェルスクリプトで変数に代入

代入方法のまとめ

この記事の行頭の$はただ一般ユーザを表すのでシェルスクリプトには関係ない
$の後がコマンドで、$が無ければ出力を表している

ヌル値の代入

変数の定義だけしたいときとかに使われる

$ AAA=
$ AAA=""

通常の代入

$ AAA=111
$ echo $AAA
111

:=で代入

変数を展開するときにその変数が未使用かヌル値の場合、値が代入される。代入した値は以降も保存される。:=は書き込み禁止変数には使えない。位置パラメタなどは書き込み禁止変数

$ echo ${BBB:=111}     #未使用
111

$ BBB=
$ echo ${BBB:=222}     #ヌル値
222
$ echo $BBB
222                  #値は保存される

コロンを省略するとヌル値が入っていた場合は代入しない

$ CCC=
$ echo ${CCC=111}
                                 #コロンを省略するとヌル値のまま

:-で代入

基本的には:=と同じ(コロンの省略も)。ただし:-の場合はそのときだけ変数に代入されて保存されない。それと、:-は位置パラメタにも使用可能

$ echo ${DDD:=111}
111
$ echo $DDD 
111

$ echo ${EEE:-111}
111
$ echo $EEE
                          #保存はされない

:+で代入

これは:-の逆。変数に値がセットされているときに値を取り替えて展開する。保存はされない

$ FFF=111
$ echo $FFF
111
$ echo ${FFF:+222}
222
$ echo $FFF
111

:?で代入

これは変数が未使用かどうか確認するときに使う。未使用のときは:?の右側の部分が表示される。右側を省略すると、デフォルトのメッセージが表示される。シェルスクリプトの場合はそこで処理が終了となる。変数がすでに使われていれば、そのまま展開される。

$ GGG=111
$ echo ${GGG:?}
111          #そのまま展開

$ echo ${HHH:?}
zsh: HHH: parameter not set     #zshの場合のデフォルトメッセージ

$ echo ${III:?jibundeshitei}
zsh: III: jibundeshitei        #  メッセージを自分で指定