Linuxの$*と$#は何ですか?
Linuxの以下の環境変数の意味を教えてください。
- $* (ドル記号とアスタリスク)とは何ですか?
- $# (ハッシュマーク/数字記号/オクトロープ/ポンド記号の隣のドル記号) とは何ですか?
Linuxの以下の環境変数の意味を教えてください。
ここでは](http://linuxsig.org/files/bash_scripting.html)から。
$# Stores the number of command-line arguments that
were passed to the shell program.
$? Stores the exit value of the last command that was
executed.
$0 Stores the first word of the entered command (the
name of the shell program).
$* Stores all the arguments that were entered on the
command line ($1 $2 ...).
"$@" Stores all the arguments that were entered
on the command line, individually quoted ("$1" "$2" ...).
基本的には、$#
はスクリプトが実行されたときに与えられた引数の数です。$*
はすべての引数を含む文字列です。例えば、$1
は第一引数などです。これは、スクリプト内の特定の引数にアクセスしたい場合に便利です。
Brianさんのコメントにあるように、簡単な例を紹介します。以下のコマンドを実行するとします。
./command -yes -no /home/username
$#
= 3 $*
= -yes -no /home/username
$@
= array. {"-yes", "-no", "/home/username"}
$0
= ./command
, $1
= -yes
など。これらは POSIX標準の一部であり、すべての準拠シェルでサポートされている必要があります。参考までに、以下に各特殊パラメータのPOSIX標準定義を示します。$-
, $$
, $!
, $@
の3つの変数が追加されていることに注意してください。
$*
。
1から始まる位置パラメータに展開します。展開がダブルクォーテーション内で行われ、フィールド分割(フィールド分割 を参照)が行われる場合、各位置パラ メータは別個のフィールドとして展開され、最初のパラ メータの展開は元のワードの先頭部分と結合され(展開されたパラ メータがワード内に埋め込まれていたと仮定して)、最後のパラ メータの展開は元のワードの最後部分と結合される。位置パラメータがない場合,’@‘の展開は,’@‘が二重引用符で囲まれている場合でも,ゼロフィールドを生成しなければならない。
$#
. 展開が二重引用符で囲まれた文字列( 二重引用符 を参照)の中にある場合は、各パラメータの値を IFS 変数の最初の文字で区切るか、IFS が未設定の場合は a で区切った単一のフィールドに展開するものとする。IFSがヌル文字列に設定されている場合、これはIFSの設定を解除することとは等価ではない。
$?
.
位置パラメータの10進数に展開する。コマンド名(パラメータ 0)は、位置パラメータではなく特殊パラメータであるため、「#」で指定した数にはカウントしない。
$-
とする。
$$
.
(ハイフン) 現在のオプションフラグ(1文字のオプション名を文字列に連結したもの)を、呼び出し時に指定されたもの、 set 特別な組み込みコマンドによって指定されたもの、またはシェルによって暗黙的に指定されたものに展開します。
$!
.
$0
:
呼び出されたシェルの10進数のプロセスIDに展開する。サブシェル( シェル実行環境 を参照)では、「$」は現在のシェルの値と同じ値に展開される。
0x6&.
0x6&:
現在のシェルから実行された直近のバックグラウンドコマンド( リスト 参照)の10進数のプロセスIDに展開する。(例えば、サブシェルから実行されたバックグラウンドコマンドは、現在のシェル環境の「$!) パイプラインの場合、プロセス ID は、パイプライン内の最後のコマンドの値になります。
0x6&.
0x6&:
(ゼロ。) シェルまたはシェルスクリプトの名前に展開します。この名前の由来の詳細については、 sh を参照してください。