シェル変数まとめ その2
      19 June 2012
    
    - 
    $?直前に実行したコマンドの終了ステータス 
- 
    $$現在動作しているコマンドのプロセスID 
- 
    $!直前のバックグラウンドジョブのプロセスID 例) $ emacs & [1] 2814 $ emacs & [2] 2816 $ echo $! 2816
- 
    $-カレントシェルで設定されているフラグ 例) $ echo $- himBH $ bash -r $ echo $- himrBH
- 
    $#位置パラメーターの数 
- 
    $*位置パラメータの全部 
- 
    $@$*と同じだが、"$@"のようにクォーティングすると、各位置パラメータも個別にクォーティングされる
- 
    $0-$9各位置パラメータ。 $0 はコマンド名称を表す 位置パラメータ関係は、シェルスクリプトの引数処理でよく使いますね。 以下の例では対話的にやってますが。 set で位置パラーメータを設定できます。 
例)
$ set a   b c d
$ echo $0
bash
$ echo $1
a
$ echo $2
b
$ echo $#
4
$ echo $*
a b c d
$ echo $@
a b c d
$ set "a   b" c d
$ echo $1
a b
$ echo $#
3
$ echo $*
a b c d
$ echo $@
a b c d
$ echo "$*"
a   b c d
$ echo "$@"
a   b c d
$ ls "$*"
ls: a   b c d にアクセスできません: そのようなファイルやディレクトリはありません
$ ls "$@"
ls: a   b にアクセスできません: そのようなファイルやディレクトリはありません
ls: c にアクセスできません: そのようなファイルやディレクトリはありません
ls: d にアクセスできません: そのようなファイルやディレクトリはありません
例題中の "$*" は "a   b c d" に "$@" は "a   b" "c" "d" に展開されています。
echo "$*" と echo "$@"は同じ結果が表示されていますが、
ls "$*" と ls "$@" は解釈のされ方が違いますね。
以下は bash でのみ使える機能だが、
- 
    $_直前のコマンドの第1引数を返す。 mkdir -p path/to/new/dir; cd $_のように使う。
blog comments powered by Disqus