シェル変数
||0|| プログラム名 ||1 ~ 9|| 第 1 ~9引数 ||@|| 全ての引数。”$@” としたときは “$1” “$2” “$3”… に等しい。 ||*|| 全ての引数。”$*” としたときは “$1 $2 $3…” に等しい。 ||#|| 引数の数 ||?|| 直前に実行したプログラムの終了コード。 ||RANDOM|| ランダムな数字。0~32767 が帰ってくる模様。 ||$|| プロセス ID
Geek なぺーじ:10 の UNIX 小技
変数と「"」の組み合わせは慎重に
特別な理由が無い限り、変数は「"」で囲う方が良いでしょう。
もし、変数名の直後に文字を使いたいのであれば、変数名を「{}」で囲いましょう。
これを忘れてしまうと、別の変数名として扱われてしまいます。
意図しない別の変数名になってしまった場合、大抵はnull値になるでしょう。
$ ls tmp/
a b
$ VAR="tmp/*"
$ echo $VAR
tmp/a tmp/b
$ echo "$VAR"
tmp/*
$ echo $VARa
$ echo "$VARa"
$ echo "${VAR}a"
tmp/*a
$ echo ${VAR}a
tmp/a
$コマンドのグループ化
コマンドをグループ分けする
大抵のシェルには、コマンドをグループ分けして実行する機能を持っています。
一般的には、subshellで行う方法と、現在実行しているshellで行う2通りの方法があります。
subshell
subshellを使う方法は、環境変数を定義しなおしたい場合に有効です。
subshellで環境変数を変更しても、現在実行中のshellが保持する環境変数は維持されます。
$ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"
現在のshell
「{}」の前後にスペースが入るように注意しましょう。
スペースを入れないと正しく動作しないかも知れません。
また、「}」の前に来る最後のコマンドの後に「;」を入れるのを忘れないようにしましょう。
$ { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"