シェル変数まとめ その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