2011-02-17 18:53:26 +0000 2011-02-17 18:53:26 +0000
83
83
Advertisement

Linuxの$*と$#は何ですか?

Advertisement

Linuxの以下の環境変数の意味を教えてください。

  1. $* (ドル記号とアスタリスク)とは何ですか?
  2. $# (ハッシュマーク/数字記号/オクトロープ/ポンド記号の隣のドル記号) とは何ですか?
Advertisement
Advertisement

回答 (2)

117
117
117
2011-02-17 18:59:34 +0000

ここでは](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 を参照してください。

0
0
0
2018-09-24 05:34:09 +0000

$# は引数の数を表します。

[root@baymax ~]# set -- a
[root@baymax ~]# echo $#
1

[root@baymax ~]# set -- a b c
[root@baymax ~]# echo $#
3
Advertisement

関連する質問

6
10
5
37
6
Advertisement