74ページのbash v5.0マニュアルには、次の文書(および同様の文書BASH_ARGC
)があります。
BASH_ARGV
現在のbash実行呼び出しスタックのすべてのパラメータを含む配列変数。最後のサブルーチン呼び出しの最後の引数はスタックの一番上にあります。最初の呼び出しの最初の引数は一番下にあります。サブルーチンが実行されると、指定されたパラメータがにプッシュされますBASH_ARGV
。シェルはBASH_ARGV
拡張デバッグモードでのみ設定されます。(shopt 組み込みコマンドの extdebug オプションについては、65 ページの 4.3.2 [Shopt 組み込みコマンド]を参照してください)。extdebug
シェルがスクリプトの実行を開始した後に設定します。またはextdebug
設定されていない状態でこの変数を参照すると、値が一貫していない可能性があります。
特に、もっと知りたい文章は太字で表示しました。
拡張デバッグモードを有効にする以外に、これらの組み込み変数を使用する方法はありますか?別の角度から尋ねたらどういう意味ですか?可能上記の最後の文はどういう意味ですか?
これらの組み込み変数がデバッグ専用と見なされる場合(1.の答えは「いいえ」)、特定の関数呼び出し内でスクリプトのコマンドラインパラメータにアクセスする最善の方法は正しいことです(つまり、他の関数によって呼び出される関数内で)。他の関数などによって呼び出されます。)以前はグローバル配列に保存されましたか? viaを介して渡すことも
"$@"
原則として可能ですが、時には不便かもしれません。
私が見つけたこの関連回答これは意味
shebang(たとえば
#!/bin/bash -O extdebug
)から、または次のようにshopt
(たとえば)shopt -s extdebug
拡張デバッグをオンにする必要があります。しかし、bash 4.2_p37では、電源を入れなくても動作します。
- ボーナスの質問です。拡張デバッグモードを有効にせずに動作するのはなぜですか?