# bashで * が意図しないワイルドカード展開される場合の対処 シェル C言語 の ソースコード の1行の文字数を80までにする必要があって, チェックツールなどが用意されているわけではなかったので, bash でチェックしようとしてハマったこと. # やはり変数展開でできます。恐ろしい。, 連想配列の場合でも同様に要素数を取得することが可能です。 0件のコメント. Bash 5.0 - Bash Variables, これらの変数はBashによって設定または使用されていますが、他のシェルでは特別に扱われません。, Bashで使用されるいくつかの変数は、さまざまな章で説明されています:ジョブ制御機能を制御する変数 ( ジョブ制御変数を参照)。, 有効なシェルオプションのコロン区切りリスト。 リストの各単語は、 shopt組み込みコマンドの-sオプションの有効な引数です( Shopt組み込み参照)。 BASHOPTSれるオプションは、 ' shopt 'によって ' on 'として報告されるものです。 この変数がBashの起動時に環境内にある場合、スタートアップファイルを読む前にリストの各シェルオプションが有効になります。 この変数は読み込み専用です。, 現在のBashプロセスのプロセスIDに展開されます。 これは、Bashを再初期化する必要のないサブシェルなど、特定の状況下では$$とは異なります。, 組み込みaliasによって維持されるエイリアスの内部リストにメンバーが対応する連想配列変数。 ( Bourne Shell Builtinsを参照)。 この配列に追加された要素はエイリアスリストに表示されます。 ただし、配列要素の設定を解除すると、エイリアスがエイリアスリストから削除されることはありません。 BASH_ALIASESが設定されていない場合、その後にリセットされても、その特殊なプロパティは失われます。, 現在のbash実行コールスタックの各フレームのパラメータ数を値とする配列変数。 現在のサブルーチン(シェル関数または.またはsource実行されるスクリプト)へのパラメータの数は、スタックの先頭にあります。 サブルーチンが実行されると、渡されたパラメータの数がBASH_ARGCプッシュされBASH_ARGC 。 シェルは、拡張デバッグモードのときにのみBASH_ARGC設定します( shopt組み込み関数に対するextdebugオプションの説明については、 extdebug Builtinを参照してください)。, 現在のbash実行呼び出しスタック内のすべてのパラメータを含む配列変数。 最後のサブルーチンコールの最後のパラメータはスタックの先頭にあります。 最初の呼び出しの最初のパラメーターは下部にあります。 サブルーチンが実行されると、供給されたパラメータがBASH_ARGVプッシュされBASH_ARGV 。 シェルは、拡張デバッグモードのときにのみBASH_ARGV設定します( shopt組み込み関数に対するextdebugオプションについては、 extdebug組み込み関数を参照してください)。, hashビルトインによって維持されるコマンドの内部ハッシュテーブルに対応するメンバを持つ連想配列変数です( Bourne Shell Builtinsを参照)。 この配列に追加された要素は、ハッシュテーブルに表示されます。 ただし、配列要素の設定を解除すると、現在、コマンド名はハッシュテーブルから削除されません。 BASH_CMDSが設定されていない場合、後でリセットされても、その特殊なプロパティは失われます。, シェルがトラップの結果としてコマンドを実行している場合を除いて、現在実行中のコマンドまたは実行しようとしているコマンド。トラップ時に実行されているコマンドです。, この値は、シェルの互換性レベルを設定するために使用されます。 さまざまな互換性レベルとその影響については、 Shopt Builtinを参照してください。 値は、所望の互換性レベルに対応する10進数(例えば4.2)または整数(例えば42)であってもよい。 BASH_COMPATが設定されていないか空の文字列に設定されている場合、互換性レベルは現在のバージョンのデフォルトに設定されます。 BASH_COMPATが有効な互換性レベルではない値に設定されている場合、シェルはエラーメッセージを出力し、現在のバージョンの互換性レベルをデフォルトに設定します。 有効な互換性レベルは、上で説明したshopt組み込み関数によって受け入れられる互換性オプションに対応します(例えば、 compat42は、4.2と42が有効な値であることを意味します)。 現在のバージョンも有効な値です。, シェルスクリプトを実行するためにBashが呼び出されたときにこの変数が設定されている場合、その値は展開され、スクリプトを実行する前に読み取るスタートアップファイルの名前として使用されます。 「 Bashスタートアップファイル」を参照してください。, FUNCNAMEの各メンバーが呼び出されたソースファイルの行番号をメンバーとする配列変数。 ${BASH_LINENO[$i]}は${BASH_LINENO[$i]}が${BASH_LINENO[$i]}れたソースファイル( ${BASH_SOURCE[$i+1]} )の行番号です( ${BASH_LINENO[$i-1]}別のシェル関数内で参照されている場合)。 LINENOを使用して現在の行番号を取得します。, シェルがenableコマンドで指定された動的にロード可能な組み込みを探すディレクトリのコロン区切りのリスト。, メンバーが ' =〜 'バイナリ演算子によって[[条件付きコマンド( 条件付き構文を参照)]に代入される配列変数。 インデックスが0の要素は、正規表現全体と一致する文字列の部分です。 インデックスnを持つ要素は、 n番目の括弧で囲まれた部分式に一致する文字列の部分です。 この変数は読み取り専用です。, メンバーがFUNCNAME配列変数の対応するシェル関数名が定義されているソースファイル名である配列変数。 シェル関数${FUNCNAME[$i]}は${FUNCNAME[$i]}ファイルで定義され、 ${BASH_SOURCE[$i+1]}から呼び出され${BASH_SOURCE[$i+1]}, シェルがその環境で実行を開始すると、各サブシェルまたはサブシェル環境内で1つずつ増分されます。 初期値は0です。, 読み込み専用の配列変数(配列を参照)。メンバーはこのBashのインスタンスのバージョン情報を保持します。 配列メンバーに割り当てられた値は次のとおりです。, 有効なファイルディスクリプタに対応する整数に設定されている場合、Bashは ' set -x 'が有効になっているときに生成されたトレース出力をそのファイルディスクリプタに書き込みます。 これにより、トレース出力を診断およびエラーメッセージから切り離すことができます。 BASH_XTRACEFDが設定されていないか、新しい値が割り当てられていると、ファイル記述子は閉じます。 BASH_XTRACEFDを設定BASH_XTRACEFDか空の文字列を割り当てると、トレース出力が標準エラーに送信されます。 BASH_XTRACEFDを2(標準エラーファイル記述子)に設定してから設定をBASH_XTRACEFDすると、標準エラーがクローズされることに注意してください。, シェルが終了するまでに残った子ステータス値の数を設定します。 Bashは、この値をPOSIXに満たされた最小値よりも小さくすることはできません。また、これを超えない最大値(現在は8192)があります。 最小値はシステムに依存します。, selectコマンドを使用して、 selectリストを印刷する際の端末幅を決定します。 checkwinsizeオプションが有効な場合( Shopt Builtinを参照)、またはSIGWINCH受信時に対話シェルで自動的に設定されます。, 現在のカーソル位置を含む単語の${COMP_WORDS}へのインデックス。 この変数は、プログラマブル補完機能によって呼び出されるシェル関数でのみ使用できます(プログラマブル補完を参照)。, 現在のコマンドライン。 この変数は、プログラマブル補完機能によって呼び出されるシェル関数と外部コマンドでのみ使用できます(プログラマブル補完を参照)。, 現在のカーソル位置のインデックス。現在のコマンドの先頭からの相対位置。 現在のカーソル位置が現在のコマンドの最後にある場合、この変数の値は${#COMP_LINE}等しくなります。 この変数は、プログラマブル補完機能によって呼び出されるシェル関数と外部コマンドでのみ使用できます(プログラマブル補完を参照)。, 完了関数が呼び出される原因となった補完のタイプに対応する整数値に設定します。TAB 、正常終了の場合は ' ? '、連続するタブの後に補完を表示する'、 ! '、単語が修正されていない場合は補完をリストする' @ '、メニュー補完の場合は' % 'の部分単語補完の代替案をリストするために使用されます。 この変数は、プログラマブル補完機能によって呼び出されるシェル関数と外部コマンドでのみ使用できます(プログラマブル補完を参照)。, 単語の補完を行うときにReadlineライブラリが単語セパレータとして扱う文字の集合。 COMP_WORDBREAKSが設定されていない場合、後でリセットされても、その特殊なプロパティは失われます。, 現在のコマンドラインの個々の単語からなる配列変数。 上記のようにCOMP_WORDBREAKSを使用して、Readlineが分割した行を単語に分割します。 この変数は、プログラマブル補完機能によって呼び出されるシェル関数でのみ使用できます(プログラマブル補完を参照)。, プログラマブル補完機能によって呼び出されるシェル関数によって生成される可能な補完をBashが読み込む配列変数です(プログラマブル補完を参照)。 各配列要素には1つの可能な完了が含まれます。, 名前の付いていないコプロセッサーからの出力用のファイル記述子を保持するために作成された配列変数( Coprocesses参照)。, ディレクトリスタックの現在の内容を含む配列変数。 ディレクトリは、 dirsされたディレクトリによって表示される順序でスタックに表示されます。 この配列変数のメンバへの代入は、既にスタックにあるディレクトリを変更するために使用できますが、ディレクトリの追加や削除にはpushdとpopd組み込み関数を使用する必要があります。 この変数に代入しても現在のディレクトリは変更されません。 DIRSTACKが設定されていない場合、 DIRSTACKは後でリセットされても、その特殊なプロパティを失います。, シェルが値 ' t 'で始まるときに環境変数Bashがこの変数を見つけた場合、シェルはEmacsシェルバッファ内で実行されているとみなし、行編集を無効にします。, BASH_ENVと同様です。 シェルがPOSIXモードで呼び出されたときに使用されます( Bash POSIXモード参照)。, PATHを使用したコマンド検索で無視されるファイル名のリストを定義するシェルパターンのコロン区切りリスト( パターンマッチングを参照)。 完全なパス名がこれらのパターンのいずれかと一致するファイルは、 PATHルックアップによる完了とコマンドの実行のために、実行可能ファイルと見なされません。 これは、 [ 、 test 、および[[ commands [[の動作には影響しません。 コマンドハッシュテーブルの完全なパス名は、 EXECIGNORE対象ではありません。 この変数を使用して、実行可能ビットが設定されているが実行可能ファイルではない共有ライブラリファイルを無視します。 パターンマッチングは、 extglobシェルオプションの設定をextglobます。, エディタは、 fc組み込みコマンドに対して-eオプションでデフォルトとして使用されます。, ファイル名の補完を行うときに無視する接尾辞のコロン区切りのリスト。 FIGNOREのエントリの1つに接尾辞が一致するファイル名は、一致するファイル名のリストから除外されます。 サンプル値は ' .o:〜 ', 現在実行呼び出しスタック内にあるすべてのシェル関数の名前を含む配列変数。 インデックスが0の要素は、現在実行中のシェル関数の名前です。 一番下の要素(インデックスが最も高い要素)は"main"です。 この変数は、シェル関数が実行されている場合にのみ存在します。 FUNCNAMEへのFUNCNAMEは効果がありません。 FUNCNAMEが設定されていない場合、 FUNCNAMEは後でリセットされても、その特殊なプロパティを失います。, この変数は、 BASH_LINENOおよびBASH_SOURCE使用できます。 FUNCNAME各要素には、呼び出しスタックを記述するBASH_LINENOとBASH_SOURCEに対応する要素があります。 たとえば${FUNCNAME[$i]}はファイル${BASH_SOURCE[$i+1]}から行番号${BASH_LINENO[$i]} 。 caller組み込み関数は、この情報を使用して現在の呼び出しスタックを表示します。, 0より大きい数値に設定すると、最大関数ネストレベルを定義します。 このネストレベルを超える関数呼び出しは、現在のコマンドを中止させます。, ファイル名の拡張によって無視されるファイル名のセットを定義するコロンで区切られたパターンのリスト。 ファイル名拡張パターンと一致するファイル名がGLOBIGNOREのパターンの1つと一致する場合、それは一致するリストから削除されます。 パターンマッチングは、 extglobシェルオプションの設定にextglobます。, 現在のユーザーがメンバーであるグループのリストを含む配列変数。 GROUPSへの割り当ては効果がありません。 GROUPSが設定されていない場合、後でリセットされてもGROUPSはその特殊なプロパティを失います。, 履歴拡張、クイック置換、トークン化を制御する3文字までです( ヒストリインタラクションを参照)。 最初の文字は履歴拡張文字です。つまり、履歴拡張の開始を示す文字です。 ' 2番目の文字は、行の最初の文字、通常は ' ^ 'と見なされたときに 'クイック置換'を意味する文字です。 オプションの3番目の文字は、単語の最初の文字(通常は#)として見つかったときに、行の残りがコメントであることを示す文字です。 履歴コメント文字は、行の残りの単語について履歴置換をスキップします。 必ずしもシェルパーサーが残りの行をコメントとして扱うとは限りません。, 現在のコマンドの履歴番号または履歴リストのインデックス。 HISTCMDが設定されていない場合は、後でリセットされてもHISTCMD特殊なプロパティは失われます。, ヒストリリストにコマンドを保存する方法を制御する、コロンで区切られた値のリスト。 値のリストに ' ignorespace 'が含まれている場合、空白文字で始まる行は履歴リストに保存されません。 ' ignoredups 'の値を指定すると、前回の履歴エントリと一致する行は保存されません。 ' ignoreboth 'の値は ' ignorespace 'と ' ignoredups 'の省略形です。 値 ' erasedups 'を指定すると、現在の行に一致するすべての前の行が、その行が保存される前に履歴リストから削除されます。 上記のリストにない値は無視されます。 HISTCONTROLが設定されていない場合、または有効な値が含まれていない場合、シェルパーサーが読み取ったすべての行は、 HISTIGNOREの値に従って、履歴リストに保存されます。 複数行複合コマンドの2行目以降の行はテストされず、 HISTCONTROLの値に関係なく履歴に追加されます。, コマンド履歴が保存されるファイルの名前。 デフォルト値は〜/ .bash_historyです。, 履歴ファイルに含まれる行の最大数。 この変数に値が割り当てられると、必要に応じて履歴ファイルが切り捨てられ、最も古いエントリを削除してその行数を超えないようにします。 ヒストリファイルは、シェルが終了したときに書き込んだ後、このサイズに切り捨てられます。 値が0の場合、ヒストリー・ファイルはゼロ・サイズに切り捨てられます。 数値以外の値とゼロより小さい数値は切り捨てを禁止します。 シェルは、起動ファイルをHISTSIZEだ後、デフォルト値をHISTSIZE値に設定します。, ヒストリリストに保存するコマンドラインを決定するために使用されるコロンで区切られたパターンのリスト。 各パターンは、行の先頭に固定され、完全な行に一致する必要があります(暗黙の「 * 」は付加されません)。 各パターンは、 HISTCONTROL指定されたチェックが適用された後、ラインに対してテストされます。 通常のシェルパターン一致文字に加えて、 ' & 'は前の履歴行と一致します。 ' & 'はバックスラッシュを使用してエスケープすることができます。 マッチを試みる前にバックスラッシュが削除されます。 複数行の複合コマンドの2行目以降の行はテストされず、 HISTIGNOREの値に関係なく履歴に追加されます。 パターンマッチングは、 extglobシェルオプションの設定をextglobます。, HISTIGNOREはHISTCONTROLの機能をHISTCONTROLます。 ' & 'のパターンはignoredupsと同じで、 ' [] * 'のパターンはignorespaceと同じです。 これらの2つのパターンを組み合わせてコロンでignoreboth 、 ignorebothという機能が提供されます。, 履歴リストで覚えておくコマンドの最大数。 値が0の場合、コマンドは履歴リストに保存されません。 0より小さい数値は、すべてのコマンドが履歴リストに保存される結果となります(制限はありません)。 シェルは、起動ファイルを読み込んだ後、デフォルト値を500に設定します。, この変数が設定されていてヌルでない場合、その値は、 strftimeのフォーマット文字列として使用され、 history組み込みによって表示される各履歴エントリに関連付けられたタイムスタンプを出力します。 この変数が設定されている場合、タイムスタンプは履歴ファイルに書き込まれ、シェルセッション間で保存される可能性があります。 これは、履歴コメント文字を使用して、他の履歴行とタイムスタンプを区別します。, シェルがホスト名を完成する必要があるときに読み込まれるはずの/ etc / hostsと同じ形式のファイルの名前が入っています。 可能なホスト名補完のリストは、シェルの実行中に変更される可能性があります。 次に値が変更された後にホスト名の補完が試行されると、Bashは新しいファイルの内容を既存のリストに追加します。 HOSTFILEが設定されていても値を持たないか、読み取り可能なファイル名を指定していない場合、Bashは/ etc / hostsを読み込み、可能なホスト名補完のリストを取得しようとします。 HOSTFILEが設定されていない場合、ホスト名リストはクリアされます。, 唯一の入力としてEOF文字を受け取ったときのシェルの動作を制御します。 設定されている場合、値は、シェルが終了する前に入力行の最初の文字として読み取られる連続するEOF文字の数を示します。 変数が存在するが数値がない(または値がない)場合、デフォルトは10です。変数が存在しない場合、 EOFはシェルへの入力の終了を示します。 これは、インタラクティブシェルでのみ有効です。, Readline初期化ファイルの名前で、デフォルトの〜/ .inputrcを上書きします。, LC_始まる変数で特に選択されていないカテゴリのロケールカテゴリを決定するために使用されます。, この変数は、ロケールカテゴリを指定するLANGおよびその他のLC_変数の値を上書きします。, この変数は、ファイル名展開の結果をソートする際に使用される照合順序を決定し、ファイル名展開とパターンマッチングの範囲式、等価クラス、および照合シーケンスの動作を決定します( ファイル名展開を参照)。, この変数は、ファイル名の展開とパターンマッチングにおける文字の解釈と文字クラスの振る舞いを決定します( ファイル名展開を参照)。, この変数は、 ' $ 'の前に二重引用符で囲まれた文字列を翻訳するために使用されるロケールを決定します( ロケール変換を参照)。, selectコマンドを使用して、 selectリストを印刷する列の長さを決定します。 checkwinsizeオプションが有効な場合( Shopt Builtinを参照)、またはSIGWINCH受信時に対話シェルで自動的に設定されます。, 標準のGNU cpu-company-system形式で、Bashが実行されているシステムタイプを完全に記述する文字列。, シェルがMAILPATHまたはMAIL変数で指定されたファイルでメールをチェックする頻度(秒単位)。 デフォルトは60秒です。 メールをチェックするときは、シェルはプライマリプロンプトを表示する前にそれを行います。 この変数が設定されていないか、または0以上の数値に設定されていない場合、シェルはメール検査を無効にします。, 変数名が指定されていないときに組み込みのmapfileファイルによって読み込まれたテキストを保持するために作成された配列変数。, 値1に設定されている場合、Bashはgetopts組み込みコマンドによって生成されたエラーメッセージを表示します。, 最後に実行されたフォアグラウンドパイプライン(単一のコマンドのみを含む)のプロセスからの終了ステータス値のリストを含む配列変数(配列を参照)。, この変数がBashの起動時に環境にある場合、起動ファイルを読み込む前に、-- posix呼び出しオプションが指定されているかのように、シェルはPOSIXモードになります( Bash POSIXモードを参照)。 シェルが実行中に設定されている場合、BashはPOSIXモードを有効にします。, 設定されている場合、その値は、各プライマリプロンプト( $PS1 )の印刷前に実行するコマンドとして解釈されます。, ゼロより大きい数値に設定すると、この値は\wおよび\Wプロンプト文字列エスケープを拡張するときに保持する末尾のディレクトリコンポーネントの数として使用されます( プロンプトの制御を参照)。 削除された文字は省略記号に置き換えられます。, このパラメータの値は、 PS1のように展開され、コマンドを読み込んだ後、コマンドが実行される前に、対話シェルによって表示されます。, この変数の値は、 selectコマンドのプロンプトとして使用されます。 この変数が設定されていない場合、 selectコマンドは ' #? ', この値は、 -xオプションが設定されているときにコマンドラインがエコーされる前に出力されるプロンプトです( Set Builtinを参照)。 PS4の最初の文字は、必要に応じて複数回複製され、複数レベルの間接指示を示します。 デフォルトは ' + 'です。, このパラメータが参照されるたびに、0〜32767の間のランダムな整数が生成されます。 この変数に値を代入すると、乱数ジェネレータが生成されます。, Readlineラインバッファの内容で、 ' bind -x '( Bash Builtinsを参照)と一緒に使用します。, Readlineラインバッファ内の挿入ポイントの位置。 ' bind -x '( Bash Builtinsを参照)で使用します。, この変数は、シェルが開始されてからの秒数に展開されます。 この変数に代入すると、数が割り当てられた値にリセットされ、展開された値は代入された値に代入後の秒数を足した値になります。, この環境変数には、シェルの絶対パス名が保持されます。 シェルが起動するときに設定されていない場合、Bashは現在のユーザーのログインシェルのフルパス名を割り当てます。, 有効なシェルオプションのコロン区切りリスト。 リスト内の各単語は、組み込みコマンドset -oオプションの有効な引数です(「組み込み関数の設定 」を参照)。 SHELLOPTSれるオプションは、 ' set -o 'によって ' on 'と報告されたものです。 この変数がBashの起動時に環境内にある場合、スタートアップファイルを読む前にリストの各シェルオプションが有効になります。 この変数は読み込み専用です。, Bashの新しいインスタンスが開始されるたびに1ずつインクリメントされます。 これは、あなたのBashシェルがどの程度深く入れ子になっているかをカウントすることを意図しています。, このパラメータの値は、 time予約語を先頭に持つパイプラインのタイミング情報をどのように表示するかを指定する書式文字列として使用されます。 ' % '文字は、時間値または他の情報に展開されるエスケープシーケンスを導入します。 エスケープシーケンスとその意味は次のとおりです。 中括弧は任意の部分を示す。, オプションのpは、精度、小数点以下の小数点以下の桁数を指定する数字です。 値が0の場合、小数点または小数は出力されません。 小数点以下3桁まで指定できます。 3より大きいpの値は3に変更されます。pが指定されない場合、値3が使用されます。, オプションのlは、 MM m SSという形式のより長い形式(分を含む)を指定します。 FF s。 pの値は、分数が含まれるかどうかを決定します。, 値がNULLの場合、タイミング情報は表示されません。 書式文字列が表示されているときに改行文字が追加されます。, 0より大きい値に設定されている場合、 TMOUTはread組み込みのデフォルトのタイムアウトとして扱われます( Bash組み込み関数を参照)。 入力が端末から来ているときにTMOUT秒後に入力が到着しないと、 selectコマンド( 条件構文を参照)が終了します。, 対話型シェルでは、この値は、1次プロンプトを発行した後に1行の入力を待つ秒数として解釈されます。 完全な入力行が届かない場合、その秒数を待って終了します。, 設定されている場合、Bashはその値をBashがシェルの使用のために一時ファイルを作成するディレクトリの名前として使用します。, non-incremental-forward-search-history (M-n), non-incremental-reverse-search-history (M-p).