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