シェル変数
シェル変数の作り方
シェル変数の名前はアルファベッド、数字、_を使う。
ただし、1文字目に数字は使えない。
普通はアルファベッドの大文字を使う。
variable=variable
variable = variable #スペースを入れてはいけないシェル変数の値を見たり操作したりする時は$variableのようにする。${variable}でも同じ。
% pwd
/
% DIR=/tmp
% cd$DIR
% pwd
/tmp
中括弧をつけるかつけないかの違いは
% FOO=abc
% echo$FOOBAR
% echo${FOO}BAR
abcBAR
ただし、$DIR/workや$ROOT.cのようにアルファベット、数字,_以外の文字を使うとシェル変数の区切りとみなされるので、{}を付けなくてもよい。
nullのシェル変数
VARIABLE=VARIABLE=""シェル変数の初期設定
変数の設定方法は以下の4つがある。
${variavle:=value}${variavle:-value}${variavle:?value}${variavle:+value}:は省略可能。 :があると変数が未使用もしくはnullのとき変数を設定する。:がないときは変数が未使用のときのみ動作する。
位置パラメタ
nnn
#!/bin/shecho$0$1$2$3$4$5$6$7$8$9% chmod +x nnn
% ./nnn a b c d e f g h i j k l m n
./nnn a b c d e f g h i
%
% ./nnn *
./nnn abc append nnn xyz
shiftを使えば、ずらすことができる。
nnn
#!/bin/shshift 3
echo$0$1$2$3$4$5$6$7$8$9% ./nnn a b c d e f g h i j k l m n
./nnn d e f g h i j k l
あるコマンドに渡される引数の数を示すには$#という変数を使う。
ただし、コマンド自身は数に入れない。
mmm
#!/bin/shecho$#% chmod +x mmm
% ./mmm a b c
3
% ./mmm "a b c"
1
引数全体を表現するには$*、$@がある。
kkk
#!/bin/shecho$*echo$@% chmod +x kkk
% ./kkk a b c
a b c
a b c
ただし、"$@"としたいときは"$1 $2 $3""$*"としたいときは"$1" "$2" "#3"としなければならない。
ちなみに\$0〜\$9,\$#,\$*,\$@は全て書き込み禁止の変数である。
特殊な変数
$?,$$,$!,$-の4つの書き込み禁止の特殊な変数がある。
$?変数
コマンド実行時の終了ステータスを表す。
command
if[$?-eq 0]
then・・・・・・・・
fi$$変数
現在動作しているコマンドの「プロセスID」がセットされている。
psコマンドで動作しているプロセスが表示される。
% ps
PID TTY TIME CMD
750 ttys000 0:00.19 -zsh
このPIDがプロセスIDのことである。
/tmp/tmp.$$のようにしてテンポラリファイルを作るときに使用する。
$!変数
&でコマンドをバックグラウンドで走らせたときのプロセスID
が$!にセットされる。
command&
・・・・
wait$&$-変数
シェルの起動時のフラグやsetコマンドを使って設定したフラグの一覧がセットされている。
% echo$-
569XZilms