名
bash - GNU Bourne-Againシェル
シノプシス
bash [オプション] [ファイル]
DESCRIPTION
Bashはsh互換のコマンド言語インタープリタで、標準入力またはファイルから読み込んだコマンドを実行します。 Bashには、 KornとCシェルの便利な機能( kshとcsh )も組み込まれています。
Bashは、IEEE POSIXシェルおよびツール仕様(IEEEワーキンググループ1003.2)の準拠した実装を意図しています。
オプション
set組み込みコマンドの説明に記載されている1文字のシェルオプションに加えて、 bashは起動時に次のオプションを解釈します。
-c 文字列
-cオプションが指定されている場合、コマンドは文字列から読み込まれます 。 文字列の後に引数がある場合、それらは$ 0で始まる位置パラメータに割り当てられます。
-私
-iオプションが指定されている場合、シェルは対話的です。
-l
あたかもログインシェルとして起動されたかのようにbashを動作させます(下記の「 INVOCATION」を参照)。
-r
-rオプションが指定されている場合、シェルは制限されます (以下の制限付きシェルを参照)。
-s
-sオプションが指定されている場合、またはオプション処理後に引数が残っていない場合、コマンドは標準入力から読み込まれます。 このオプションは、対話型シェルを呼び出すときに位置パラメーターを設定できるようにします。
-D
$で始まるすべての二重引用符付き文字列のリストは、標準出力に出力されます。 現在のロケールがCまたはPOSIXでない場合、これらは言語変換の対象となる文字列です。 これは-nオプションを意味します。 コマンドは実行されません。
[ - +] O [ shopt_option ]
shopt_optionは、 shopt組み込み関数によって受け入れられるシェルオプションの1つです(以下のシェルビルルン コマンドを参照してください)。 shopt_optionが存在する場合、 -Oはそのオプションの値を設定します。 + Oはそれを設定解除します。 shopt_optionが指定されていない場合、 shoptで受け入れられたシェルオプションの名前と値が標準出力に出力されます。 呼び出しオプションが+ Oの場合、出力は入力として再使用可能な形式で表示されます。
A -オプションの終了を通知し、さらにオプション処理を無効にします。 - の後の引数は、ファイル名と引数として扱われます。 -の引数は-と等価です。
Bashは、複数の文字オプションを解釈します。 これらのオプションは、1文字のオプションを認識する前にコマンドラインに表示する必要があります。
--dump-po-strings
-Dと同じですが、出力はGNU gettext po (ポータブルオブジェクト)ファイル形式です。
--dump-strings
-Dと同じです。
- 助けて
標準出力に使用法メッセージを表示し、正常に終了します。
--init-file ファイル
--rcfile ファイル
シェルが対話式である場合は、標準の個人用初期設定ファイル〜/ .bashrcではなく、 ファイルからコマンドを実行します(下記の「 INVOCATION」を参照)。
- ログイン
-lと同じです。
- noediting
シェルがインタラクティブである場合、GNU readlineライブラリを使ってコマンドラインを読み込まないでください。
--noprofile
/ etc / profileまたは個人用初期化ファイル〜/ .bash_profile 、 〜/ .bash_login 、 〜/ .profileのいずれも読んではいけません。 デフォルトでは、 bashはログインシェルとして呼び出されたときにこれらのファイルを読み込みます(下記の「 INVOCATION」を参照)。
--norc
シェルが対話式である場合、個人用初期設定ファイル〜/ .bashrcを読み込んで実行しないでください。 シェルがshとして呼び出された場合、このオプションはデフォルトでオンになっています。
--posix
デフォルト操作がPOSIX 1003.2標準と異なる(POSIX モード ) bashの動作を変更してください 。
- 制限付き
シェルは制限されます(以下の制限付きシェルを参照)。
--rpm-requires
シェルスクリプトを実行するために必要なファイルのリストを作成します。 これは '-n'を意味し、コンパイル時のエラーチェックのチェックと同じ制限があります。 バッククォート、[]テスト、およびエバールは解析されないため、いくつかの依存関係が見落とされる可能性があります。 --verbose -vと同じです。
- バージョン
bashのこのインスタンスのバージョン情報を標準出力に表示し、正常に終了します。
論争
オプション処理後に引数が残っていて、 -cオプションも-sオプションも指定されていない場合、最初の引数はシェルコマンドを含むファイルの名前とみなされます。 bashがこのように呼び出されると、 $ 0はファイルの名前に設定され、位置パラメーターは残りの引数に設定されます。 Bashはこのファイルからコマンドを読み込んで実行し、終了します。 Bashの終了ステータスは、スクリプトで最後に実行されたコマンドの終了ステータスです。 コマンドが実行されない場合、終了ステータスは0です。まずカレントディレクトリ内のファイルを開こうとします。ファイルが見つからない場合は、 PATH内のディレクトリからスクリプトを探します。
インポート
ログインシェルは、引数0の最初の文字が-または--loginオプションで始まる文字です。
対話型シェルとは、オプションの引数なしで起動され、 -cオプションなしで標準入力と出力の両方が( isatty (3)によって決定される)端末に接続されているシェルか、 -iオプションで起動されたシェルです。 PS1が設定され、 $ - iがbashがインタラクティブな場合はiを含み、シェルスクリプトまたはスタートアップファイルがこの状態をテストできるようにします。
次の段落では、 bashが起動ファイルを実行する方法について説明します。 いずれかのファイルが存在するが読み込めない場合、 bashはエラーを報告します。 ティルダは、 EXPANSIONセクションのティルド展開で後述するように、ファイル名で展開されます。
bashが対話型ログインシェルとして、または--loginオプション付きの非対話型シェルとして呼び出されると、まず/ etc / profileファイルが存在する場合、そのファイルからコマンドを読み込んで実行します。 このファイルを読み取った後、 〜/ .bash_profile 、 〜/ .bash_login 、 〜/ .profileの順に検索し 、存在し、読み込み可能な最初のコマンドからコマンドを読み込んで実行します。 この動作を抑制するためにシェルが起動された場合、 - noprofileオプションを使用することができます。
ログインシェルが終了すると、 bashは〜/ .bash_logoutファイルからコマンドを読み込んで実行します(存在する場合)。
ログインシェルではない対話シェルが開始されると、 bashはそのファイルが存在する場合に〜/ .bashrcからコマンドを読み込んで実行します。 これは、-- norcオプションを使用することで禁止されます。 --rcfile fileオプションは、 〜/ .bashrcの代わりにファイルからコマンドを読み込んで実行するようにbashに強制します 。
例えば、 bashが非対話的に起動されると、シェルスクリプトを実行するために、環境変数BASH_ENVが見つかるとその値が展開され、展開された値が読み込みと実行のファイル名として使用されます。 Bashは、次のコマンドが実行されたかのように動作します。
if [-n "$ BASH_ENV"]; 次に。 "$ BASH_ENV"; fi
PATH変数の値はファイル名の検索には使用されません。
bashがshという名前で呼び出されると、歴史的なバージョンのshの起動動作を可能な限り厳密に模倣しようとしますが、POSIX標準にも準拠しています。 対話型ログインシェル、または非対話型シェルとして--loginオプションを指定して起動すると、最初に/ etc / profileおよび〜/ .profileのコマンドをその順序で読み込んで実行しようとします。 この動作を抑止するには、 - noprofileオプションを使用します。 shという名前の対話型シェルとして呼び出されると、 bashは変数ENVを探し、定義されていればその値を展開し、展開した値を読み込んで実行するファイルの名前として使用します。 shとして呼び出されたシェルは、他の起動ファイルからコマンドを読み込んで実行しようとしないので、-- rcfileオプションは効果がありません。 shという名前で起動された非対話型シェルは、他の起動ファイルを読み込もうとしません。 shとして起動すると、起動ファイルが読み込まれた後にbashが posixモードに入ります。
POSIXモードでbashを起動すると、-- posixコマンドラインオプションと同様に、起動ファイルのPOSIX標準に従います。 このモードでは、対話型シェルがENV変数を展開し、コマンドが展開された名前のファイルから読み込まれて実行されます。 他の起動ファイルは読み込まれません。
Bashはリモートシェルデーモン(通常はrshd)によっていつ実行されているのかを判断しようとします。 bashがrshdによって実行されていると判断した場合、 〜/ .bashrcからのコマンドが読み込まれ、読み込み可能であればそれを実行します。 これは、 shとして呼び出された場合はこれを行いません。 --norcオプションはこの動作を抑止するために使用され、-- rcfileオプションは別のファイルを強制的に読み込むために使用されるかもしれませんが、 rshdは一般的にそれらのオプションを持つシェルを起動したり、指定することはできません。
有効なユーザ(グループ)idが実ユーザ(グループ)のidと等しくなく、シェルが起動され、 -pオプションが指定されていない場合、起動ファイルは読み込まれず、シェル関数は環境から継承されません.SHELLOPTS変数が環境に現れた場合は無視され、実効ユーザーIDは実ユーザーIDに設定されます。 起動時に-pオプションを指定すると、起動時の動作は同じですが、有効なユーザIDはリセットされません。
定義
以下の定義は、この文書の残りの部分で使用されています。
ブランク
スペースまたはタブ。
ワード
シェルによって単一の単位とみなされる一連の文字。 トークンとも呼ばれます 。
名
英数字とアンダースコアのみで構成され、英字またはアンダースコアで始まる単語 。 識別子とも呼ばれます 。
メタキャラクター
引用符で囲まないと単語を区切る文字。 次のいずれか:
| &; ()<>スペースタブ
制御オペレータ
制御機能を実行するトークン 。 次の記号のいずれかです。
|| &&&; ;; ()| <改行>
予約語
予約語は、シェルにとって特別な意味を持つ単語です。 次の単語は、引用符なしで単純なコマンドの最初の単語(下記のSHELL GRAMMARを参照)またはケースの 3番目の単語またはコマンドのいずれかのときに予約として認識されます。
! 大文字小文字を入れたelif else esac fiをselectにしてwhileまでwhile {}時間[[]]
シェルグラマー
簡単なコマンド
単純なコマンドは、 空白で区切られた単語とリダイレクションのあとに続く、 制御演算子で終了するオプションの変数代入のシーケンスです。 最初のワードは実行されるコマンドを指定し、引数0として渡されます。 残りの単語は、呼び出されたコマンドに引数として渡されます。
単純なコマンドの戻り値は終了ステータスです。コマンドがシグナルnで終了する場合は128+ nです。
パイプライン
パイプラインは、文字で区切られた1つ以上のコマンドのシーケンスです。 。 パイプラインの形式は次のとおりです。
[ 時間 [ -p ]] [! ] コマンド [ | command2 ...]
コマンドの標準出力は、パイプを介してcommand2の標準入力に接続されています。 この接続は、コマンドで指定されたリダイレクションの前に実行されます(以下のリダイレクトを参照)。
予約語の場合! パイプラインに先行する場合、そのパイプラインの終了ステータスは、最後のコマンドの終了ステータスの論理NOTです。 それ以外の場合は、パイプラインのステータスが最後のコマンドの終了ステータスになります。 シェルは、パイプライン内のすべてのコマンドが値を返す前に終了するのを待ちます。
時間予約語がパイプラインに先行する場合、パイプラインが終了すると、その実行によって消費された経過時間とユーザーおよびシステム時間が報告されます。 -pオプションは、出力フォーマットをPOSIXで指定されたものに変更します。 TIMEFORMAT変数は、タイミング情報の表示方法を指定する書式文字列に設定できます。 以下のシェル変数のTIMEFORMATの説明を参照してください。
パイプライン内の各コマンドは、別のプロセスとして(つまり、サブシェル内で)実行されます。
リスト
リストは、演算子の1つで区切られた1つ以上のパイプラインのシーケンスです。 、 & 、 && 、または|| 任意には、 、 & 、または<改行> 。
これらのリスト演算子のうち、 &&と|| 同じ優先順位を持ち、その後に続きます。 と&が優先されます。
コマンドを区切るためにセミコロンの代わりに1つ以上の改行のシーケンスがリストに表示されることがあります。
コマンドが制御演算子&によって終了された場合、シェルはサブシェルのバックグラウンドでコマンドを実行します。 シェルはコマンドが終了するのを待たず、戻りステータスは0 です。 順次実行される。 シェルは各コマンドが終了するのを待ちます。 戻りステータスは、最後に実行されたコマンドの終了ステータスです。
制御演算子&&と|| ANDリストとORリストをそれぞれ示します。 ANDリストの形式は次のとおりです。
command1 && command2
command2は、 command1が終了ステータス0を戻す場合にのみ実行されます。
ORリストの形式は次のとおりです。
command1 || command2
command1が0以外の終了ステータスを返した場合にのみcommand2が実行されます。 ANDおよびORリストの戻り状態は、リスト内で最後に実行されたコマンドの終了状態です。
複合コマンド
複合コマンドは、次のいずれかです。
( リスト )
リストはサブシェルで実行されます。 シェルの環境に影響を与える変数の割り当てや組み込みコマンドは、コマンドが完了しても有効なままではありません。 戻り状況は、 リストの終了状況です。
{ リスト ; }
リストは現在のシェル環境で単に実行されます。 リストは改行またはセミコロンで終わらなければなりません。 これはグループコマンドと呼ばれます。 戻り状況は、 リストの終了状況です。 メタキャラクタ(および)とは異なり、 {および}は予約語であり、予約語が認識されることが許可されている場所で発生しなければならないことに注意してください。 単語区切りを引き起こさないので、 リストから空白で区切らなければなりません。
(( 式 ))
この表現は、以下に記述されているARITHMETIC EVALUATIONの規則に従って評価されます。 式の値がゼロでない場合、戻り状況は0です。 それ以外の場合、戻り値のステータスは1です。これはlet " expression "とまったく同じです。
[[ 式 ]]
条件式の評価に応じて0または1の状態を返します。 式は、以下の条件付き式で説明されているプライマリで構成されます。 単語の分割とパス名の拡張は[[と]]の間の単語に対しては実行されません。 チルダの展開、パラメータと変数の展開、算術展開、コマンド置換、プロセス置換、および引用の削除が実行されます。
==および!=演算子を使用すると、演算子の右側の文字列がパターンとみなされ、パターンマッチングの下で説明されている規則に従って一致します。 文字列がパターンと一致するか一致しない場合、戻り値は0で、そうでない場合は1です。 パターンのどの部分も引用符で囲んで文字列として一致させることができます。
式は、次の演算子を使用して組み合わせることができます。優先順位の高い順にリストされます。
( 表現 )
expressionの値を返します。 これは、演算子の通常の優先順位を無効にするために使用されます。
! 表現
expressionがfalseの場合はtrue。
式1 && 式2
expression1とexpression2の両方がtrueの場合はTrueです。
式1 || expression2 expression1またはexpression2がtrueの場合はtrue。
&&と|| expression1の値が条件式全体の戻り値を決定するのに十分である場合、演算子はexpression2を評価しません。
名前の [ in word ]; リストを 行う 。 完了
後続する単語のリストが展開され、項目のリストが生成されます。 変数名はこのリストの各要素に順に設定され、毎回リストが実行されます。 inを省略すると、 forコマンドは、設定されている各位置パラメーターに対してlistを 1回実行します(以下のパラメーターを参照)。 戻りステータスは、最後に実行されるコマンドの終了ステータスです。 後続の項目の展開が空のリストになった場合、コマンドは実行されず、戻り状況は0になります。
for (( expr1 ; expr2 ; expr3 )); リストを 行う 。 完了
まず算術式expr1は、以下に記述されているARITHMETIC EVALUATIONの規則に従って評価されます。 算術式expr2は、評価されるまで繰り返し評価されます。 expr2がゼロ以外の値に評価されるたびに、 リストが実行され、算術式expr3が評価されます。 いずれかの式が省略された場合は、1と評価されるように動作します。戻り値は、実行されたリスト内の最後のコマンドの終了ステータスであり、いずれかの式が無効な場合はfalseです。
名前を [ 単語で ] 選択する 。 リストを 行う 。 完了
後続する単語のリストが展開され、項目のリストが生成されます。 展開された単語のセットは標準エラーに印刷され、それぞれの前に番号が付けられます。 inを省略すると、位置パラメータが出力されます(以下のパラメータを参照)。 PS3プロンプトが表示され、標準入力から行が読み込まれます。 行が表示された単語の1つに対応する数字で構成されている場合、 nameの値はその単語に設定されます。 行が空の場合、単語とプロンプトが再び表示されます。 EOFが読み取られると、コマンドは完了します。 その他の値を読み取ると、 nameはnullに設定されます。 読み取られた行は変数REPLYに保存されます。 このリストは、各選択後にブレークコマンドが実行されるまで実行されます。 selectの終了ステータスは、 リストで最後に実行されたコマンドの終了ステータスです。コマンドが実行されなかった場合は0です。
大文字小文字の 単語 [[(] pattern [ | pattern ]
caseコマンドは、最初に単語を展開し、パス名の展開と同じ規則を使用して単語を順番に各パターンと照合しようとします(下記のパス名展開を参照)。 一致するものが見つかると、対応するリストが実行されます。 最初の試合の後、その後の試合は試行されません。 パターンが一致しない場合、終了ステータスはゼロです。 それ以外の場合は、 listで最後に実行されたコマンドの終了ステータスです。
リストの 場合 。 リストします。 [ elif list ; リストします。 ] ... [ else リスト ; ] fi
if リストが実行されます。 終了ステータスがゼロの場合、 then リストが実行されます。 それ以外の場合は、各elif リストが順番に実行され、終了ステータスがゼロの場合、対応するthen リストが実行され、コマンドが完了します。 それ以外の場合は、存在する場合はelse リストが実行されます。 終了ステータスは、実行された最後のコマンドの終了ステータスです。テストされた条件が真でない場合はゼロです。
リスト中 。 リストを 行う 。 完了
リスト まで 。 リストを 行う 。 完了
whileコマンドは、 リストの最後のコマンドが終了ステータス0を返す限り、 do リストを継続的に実行します。 untilコマンドは、テストが否定されることを除いて、 whileコマンドと同じです。 リスト内の最後のコマンドがゼロ以外の終了ステータスを返す限り、 do リストは実行されます。 whileおよびuntilコマンドの終了ステータスは、実行された最後のdo listコマンドの終了ステータスです。実行されなかった場合はゼロです。
[ 関数 ] name (){ リスト ; }
これはnameという名前の関数を定義します。 関数の本体は{と}の間のコマンドのリストです。 このリストは、nameが単純なコマンドの名前として指定されたときに実行されます。 関数の終了ステータスは、本体で最後に実行されたコマンドの終了ステータスです。 (下記の機能を参照してください)。
コメント
非対話型シェル、またはshopt組み込み関数のinteractive_commentsオプションが有効になっている対話型シェル(後述のシェルビルドコマンドを参照)では、 #で始まる単語はその単語とその行の残りの文字をすべて無視します。 interactive_commentsオプションを有効にしない対話型シェルは、コメントを許可しません。 interactive_commentsオプションは、対話型シェルではデフォルトでオンになっています。
クォート
クォートは、特定の文字や単語の特殊な意味をシェルに取り除くために使用されます。 クォーテーションは、特殊文字の特殊処理を無効にしたり、予約語がそのように認識されないようにしたり、パラメータ拡張を防ぐために使用できます。
上で定義されている各メタキャラクタはシェルにとって特別な意味を持ち、それを表現するには引用符で囲む必要があります。
コマンド履歴拡張機能を使用している場合、通常は履歴拡張文字! 履歴拡張を防ぐために引用符で囲む必要があります。
エスケープ文字 、一重引用符、二重引用符の3つの引用メカニズムがあります。
クォートされていないバックスラッシュ( \ )はエスケープ文字です。 次の文字のリテラル値を保持しますが、
一重引用符で囲む文字は、引用符内の各文字のリテラル値を保持します。 たとえバックスラッシュが前に置かれていても、一重引用符間に一重引用符はできません。
二重引用符で囲む文字は、引用符内のすべての文字のリテラル値を保持しますが、 $ 、 ` 、および\は例外です。 文字$と`は二重引用符で囲まれた特殊な意味を保持します。 $ 、 ` 、 " 、 \ 、または<改行>のいずれかの文字が続く場合にだけ、バックスラッシュは特別な意味を持ちます 。二重引用符は、二重引用符の前にバックスラッシュを付けて引用することができます。
特別なパラメータ*と@は、二重引用符(以下のパラメータを参照)の中で特別な意味を持ちます。
$ ' string 'という形式の単語は特別に扱われます。 単語は文字列に展開され、ANSI C標準で指定されているようにバックスラッシュエスケープ文字が置き換えられます。 バックスラッシュのエスケープシーケンスが存在する場合、次のようにデコードされます。
\ a
警告(ベル)
\ b
バックスペース
\ e
エスケープ文字
\ f
フォームフィード
\ n
改行
\ r
キャリッジリターン
\ t
水平タブ
\ v
垂直タブ
\\
バックスラッシュ
\ '
一重引用符
\ nnn
値が8進数のnnn ( 1〜3桁)の8ビット文字
\ xHH
値が16進値HH (1桁または2桁の16進数)である8ビット文字
\ c x
制御x文字
あたかもドル記号がなかったかのように、展開された結果は一重引用符で囲まれます。
二重引用符で囲まれた文字列の前にドル記号( $ )があると、現在のロケールに応じて文字列が変換されます。 現在のロケールがCまたはPOSIXの場合、ドル記号は無視されます。 文字列が変換され置換された場合、置換は二重引用符で囲まれます。
パラメーター
パラメータは値を格納するエンティティです。 特殊パラメータの下にリストされている特殊文字の名前 、数字、または1つの文字にすることができます。 シェルの目的のために、 変数は名前で示されるパラメータです。 変数には値と0個以上の属性があります 。 属性は、 declare組み込みコマンド( SHELL BUILTIN COMMANDSの下の宣言を参照)を使用して割り当てられます。
パラメータに値が割り当てられている場合は、パラメータが設定されます。 ヌル文字列は有効な値です。 変数が設定されると、 unset組み込みコマンドを使用することによってのみ設定が解除されることがあります(下記のシェルビルドコマンドを参照)。
変数は、フォームのステートメントによって割り当てられます。
名前 = [ 値 ]
valueが指定されていない場合、変数にはヌル文字列が割り当てられます。 すべての値は、チルダの展開、パラメータと変数の展開、コマンドの置換、算術展開、引用の削除を行います(下記のEXPANDを参照してください)。 変数に整数属性が設定されている場合、$((...))展開が使用されていなくても、 valueは算術展開の対象になります (下記の算術展開を参照)。 ワードスプリットは実行されません。 特別なパラメータの下で説明する"$ @"は例外です。 パス名展開は実行されません。 代入文は、 declare 、 typeset 、 export 、 readonly 、およびlocal組み込みコマンドの引数としても使用できます。
位置パラメータ
位置パラメータは、1桁の0以外の1桁以上の数字で表されるパラメータです。 位置パラメータは、呼び出されたときにシェルの引数から割り当てられ、組み込みコマンドsetを使用して再割り当てできます。 代入文では、位置パラメータを割り当てることはできません。 位置パラメータは、シェル関数が実行されるときに一時的に置き換えられます(下記の関数を参照)。
2桁以上の位置パラメータを展開する場合は、中括弧で囲む必要があります(下記のEXPANSIONを参照)。
特別なパラメータ
シェルはいくつかのパラメータを特別に扱います。 これらのパラメータは参照のみ可能です。 それらへの割り当ては許可されません。
*
1から始まる定位置パラメーターに展開します。 拡張が二重引用符で囲まれると、各パラメータの値をIFS特殊変数の最初の文字で区切って1つの単語に展開します。 つまり、 " $ * "は " $ 1 c $ 2 c ... "に相当します。ここで、 cはIFS変数の値の最初の文字です。 IFSが設定されていない場合、パラメータはスペースで区切られます。 IFSがヌルの場合、パラメータは区切り文字を介さずに結合されます。
@
1から始まる定位置パラメーターに展開します。 展開が二重引用符で囲まれると、各パラメータは別の単語に展開されます。 つまり、 " $ @ "は " $ 1 " " $ 2 "と等価です。位置パラメータがない場合、 " $ @ "と$ @は何も展開しません(つまり、それらは削除されます)。
#
位置パラメータの数を10進数に展開します。
?
最後に実行されたフォアグラウンドパイプラインのステータスに展開されます。
-
起動時に指定された現在のオプションフラグ、 set組み込みコマンド、またはシェル自体で設定されたオプションフラグ( -iオプションなど)に展開されます。
$
シェルのプロセスIDに展開されます。 a()サブシェルでは、サブシェルではなく現在のシェルのプロセスIDに展開されます。
!
最後に実行されたバックグラウンド(非同期)コマンドのプロセスIDに展開されます。
0
シェルスクリプトまたはシェルスクリプトの名前に展開されます。 これはシェルの初期化時に設定されます。 bashがコマンドのファイルで呼び出された場合、 $ 0はそのファイルの名前に設定されます。 bashが-cオプションで起動されている場合、実行される文字列の後に最初の引数が存在する場合、 $ 0が最初の引数に設定されます。 それ以外の場合は、引数0で指定されたbashを呼び出すために使用されるファイル名に設定されます。
_
シェルの起動時に、引数リストで渡されるシェルまたはシェルスクリプトの絶対ファイル名を設定します。 その後、展開後に直前のコマンドの最後の引数に展開されます。 また、実行され、そのコマンドにエクスポートされた環境に置かれた各コマンドの完全なファイル名にも設定されます。 メールをチェックするとき、このパラメータは現在チェックされているメールファイルの名前を保持します。
シェル変数
以下の変数はシェルによって設定されます:
BASH
bashのこのインスタンスを呼び出すために使用される完全なファイル名に展開されます。
BASH_VERSINFO
bashのこのインスタンスのバージョン情報を保持する読取り専用配列変数。 配列メンバーに割り当てられた値は次のとおりです。
BASH_VERSINFO [ 0]
メジャーバージョン番号( リリース )。
BASH_VERSINFO [ 1]
マイナーバージョン番号( バージョン )。
BASH_VERSINFO [ 2]
パッチレベル。
BASH_VERSINFO [ 3]
ビルド版。
BASH_VERSINFO [ 4]
リリースステータス(例: beta1 )。
BASH_VERSINFO [ 5]
MACHTYPEの値。
BASH_VERSION
bashのこのインスタンスのバージョンを説明する文字列に展開します。
COMP_CWORD
COMP_LINE
現在のコマンドライン。 この変数は、プログラマブル補完機能によって呼び出されるシェル関数と外部コマンドでのみ使用できます(下記のプログラマブル補完を参照)。
COMP_POINT
COMP_WORDS
現在のコマンドラインの個々の単語からなる配列変数(以下の配列を参照)。 この変数は、プログラム可能な補完機能によって呼び出されるシェル関数でのみ使用できます(下記のプログラマブル補完を参照してください)。
DIRSTACK
ディレクトリ変数の現在の内容を含む配列変数(以下の配列を参照)。 ディレクトリは、 ビルドされたディレクトリによって表示される順序でスタックに表示されます。 この配列変数のメンバへの代入は、既にスタックにあるディレクトリを変更するために使用できますが、ディレクトリの追加や削除にはpushdとpopdの組み込み関数を使用する必要があります。 この変数に代入しても現在のディレクトリは変更されません。 DIRSTACKが設定されていない場合、 DIRSTACKは後でリセットされても、その特殊なプロパティを失います。
EUID
シェルの起動時に初期化された現行ユーザーの実効ユーザーIDに展開されます。 この変数は読み込み専用です。
FUNCNAME
現在実行中のシェル関数の名前。 この変数は、シェル関数が実行されている場合にのみ存在します。 FUNCNAMEへの代入は効果がなく、エラー状態を返します。 FUNCNAMEが設定されていない場合、 FUNCNAMEは後でリセットされても、その特殊なプロパティを失います。
グループ
現在のユーザーがメンバーであるグループのリストを含む配列変数。 GROUPSへの代入は効果がなく、エラー状態を返します。 GROUPSが設定されていない場合、後でリセットされてもGROUPSはその特殊なプロパティを失います。
HISTCMD
現在のコマンドの履歴番号または履歴リストのインデックス。 HISTCMDが設定されていない場合は、後でリセットされてもHISTCMDの特殊なプロパティは失われます。
ホスト名
現在のホストの名前に自動的に設定されます。
HOSTTYPE
bashが実行されているマシンのタイプを一意に示す文字列に自動的に設定されます。 デフォルトはシステムに依存します。
リネーノ
このパラメータが参照されるたびに、シェルはスクリプトまたは関数内の現行の行番号(1から始まる)を表す10進数を代入します。 スクリプトまたは関数にない場合、置換された値は意味を持つとは限りません。 LINENOが設定されていない場合は、後でリセットされても、 LINENOはその特殊なプロパティを失います。
MACHTYPE
標準のGNU cpu-company-systemフォーマットで、 bashが実行されているシステムタイプを完全に記述する文字列に自動的に設定されます。 デフォルトはシステムに依存します。
OLDPWD
cdコマンドで設定された前の作業ディレクトリ。
OPTARG
getopts組み込みコマンドで処理された最後のオプション引数の値(下記のシェルビルドコマンドを参照してください)。
OPTIND
getopts組み込みコマンドで処理される次の引数のインデックス(下記のシェルビルドコマンドを参照)。
OSTYPE
bashが実行されているオペレーティングシステムを表す文字列に自動的に設定されます。 デフォルトはシステムに依存します。
パイプステート
直前に実行されたフォアグラウンドパイプライン(単一のコマンドのみを含む)のプロセスからの終了ステータス値のリストを含む配列変数(以下の配列を参照)。
PPID
シェルの親のプロセスID。 この変数は読み込み専用です。
障害者
cdコマンドで設定された現在の作業ディレクトリ。
ランダム
このパラメータが参照されるたびに、0〜32767の間のランダムな整数が生成されます。 乱数のシーケンスは、 RANDOMに値を代入することによって初期化することができる。 RANDOMが設定されていない場合は、後でリセットされても、その特殊なプロパティは失われます。
応答
引数が指定されていない場合は、 read組み込みコマンドで読み取られた入力行に設定します。
セカンド
このパラメータが参照されるたびに、シェル呼び出しが返されてからの秒数が返されます。 SECONDSに値が割り当てられている場合、後続の参照時に返される値は、割り当てから割り当てられた値に加えて秒数です。 SECONDSが設定されていない場合、 SECONDSは後でリセットされても、その特殊なプロパティを失います。
SHELLOPTS
有効なシェルオプションのコロン区切りリスト。 リスト内の各単語は、組み込みコマンドセットの -oオプションの有効な引数です(以下のシェルビルルコマンドを参照してください)。 SHELLOPTSに表示されるオプションは 、 set -oによってonと報告されたものです。 この変数がbashの起動時に環境内にある場合、スタートアップファイルを読む前にリストの各シェルオプションが有効になります。 この変数は読み取り専用です。
SHLVL
bashのインスタンスが開始されるたびに1ずつインクリメントされます。
UID
シェルの起動時に初期化された、現在のユーザーのユーザーIDに展開されます。 この変数は読み込み専用です。
次の変数はシェルによって使用されます。 場合によっては、 bashは変数にデフォルト値を割り当てます。 これらのケースは以下に記載されています。
BASH_ENV
bashがシェルスクリプトを実行しているときにこのパラメータを設定すると、その値は〜/ .bashrcのようにシェルを初期化するコマンドを含むファイル名として解釈されます 。 BASH_ENVの値は、ファイル名として解釈される前に、パラメータ展開、コマンド置換、および算術展開の対象となります。 結果のファイル名を検索するためにPATHは使用されません。
CDPATH
cdコマンドの検索パス。 これはコロンで区切られたディレクトリのリストで、シェルはcdコマンドで指定された宛先ディレクトリを探します。 サンプル値は "。:〜:/ usr"です。
列
選択リストを印刷するときに、組み込みコマンドselectで使用され、端末の幅を決定します。 SIGWINCHの受信時に自動的に設定されます。
補完
プログラマブル補完機能によって呼び出されるシェル関数によって生成された可能な補完をbashが読み込む配列変数です(下記のプログラマブル補完を参照してください)。
FCEDIT
fc組み込みコマンドのデフォルトエディター。
FIGNORE
ファイル名補完を行う際に無視する接尾辞のコロン区切りのリストです(下記のREADLINEを参照)。 FIGNOREのエントリの1つに接尾辞が一致するファイル名は、一致するファイル名のリストから除外されます。 サンプル値は ".o:〜"です。
GLOBIGNORE
pathname拡張によって無視されるファイル名のセットを定義するコロン区切りのパターンのリスト。 パス名拡張パターンと一致するファイル名がGLOBIGNOREのパターンの1つと一致する場合、それは一致するリストから削除されます。
HISTCONTROL
ignorespaceの値に設定すると、 空白文字で始まる行は履歴リストには入力されません。 ignoredupsの値に設定すると、最後の履歴行に一致する行は入力されません。 ignorebothの値は、2つのオプションを組み合わせたものです。 未設定の場合、または上記以外の値に設定されている場合、パーサーが読み取ったすべての行はヒストリリストに保存され、 HISTIGNOREの値に従います。 この変数の機能は、 HISTIGNOREに置き換えられています 。 複数行複合コマンドの2行目以降の行はテストされず、 HISTCONTROLの値に関係なく履歴に追加されます。
ヒストファイル
コマンド履歴が保存されているファイルの名前です(下記のHISTORYを参照)。 デフォルト値は〜/ .bash_historyです。 unsetの場合、対話シェルが終了するとコマンド履歴は保存されません。
ヒストリ
履歴ファイルに含まれる行の最大数。 この変数に値が代入されると、必要に応じて履歴ファイルが切り捨てられ、その行数を超えないようになります。 デフォルト値は500です。ヒストリーファイルは、対話シェルが終了したときに書き込んだ後、このサイズに切り捨てられます。
ヒステリーレ
ヒストリリストに保存するコマンドラインを決定するために使用されるコロンで区切られたパターンのリスト。 各パターンは、行頭にアンカーされ、完全な行と一致しなければなりません(暗黙の ` * 'は付加されません)。 各パターンは、 HISTCONTROLで指定されたチェックが適用された後、ラインに対してテストされます。 通常のシェルパターン一致文字に加えて、 ` & 'は前の履歴行と一致します。 ` & 'はバックスラッシュを使用してエスケープすることができます。 マッチを試みる前にバックスラッシュが削除されます。 複数行の複合コマンドの2行目以降の行はテストされず、 HISTIGNOREの値に関係なく履歴に追加されます。
虚偽
コマンド履歴で覚えておくべきコマンドの数(下記の歴史を参照)。 デフォルト値は500です。
ホーム
現在のユーザーのホームディレクトリ。 cd組み込みコマンドのデフォルト引数。 この変数の値は、ティルド展開を実行するときにも使用されます。
ホスト
シェルがホスト名を完成する必要があるときに読み込まれるはずの/ etc / hostsと同じ形式のファイルの名前が入っています。 可能なホスト名補完のリストは、シェルの実行中に変更される可能性があります。 次に値が変更された後にホスト名の補完が試行されると、 bashは新しいファイルの内容を既存のリストに追加します。 HOSTFILEが設定されていても値がない場合、 bashは/ etc / hostsを読み込み、可能なホスト名補完のリストを取得しようとします。 HOSTFILEが設定されていない場合、ホスト名リストはクリアされます。
IFS
拡張後の単語分割に使用され、 read組み込みコマンドで行を単語に分割するために使用される内部フィールド区切り文字。 デフォルト値は ``
IGNOREEOF
唯一の入力としてEOF文字を受け取ったときの対話シェルの動作を制御します。 設定されている場合、値は連続するEOF文字の数で、 bashが終了する前に入力行の最初の文字として入力する必要があります。 変数が存在するが数値がないか、値がない場合、デフォルト値は10です。存在しない場合、 EOFはシェルへの入力の終了を示します。
INPUTRC
readlineスタートアップファイルのファイル名で、デフォルトの〜/ .inputrcをオーバーライドします(以下のREADLINEを参照してください)。
LANG
LC_で始まる変数で特に選択されていないカテゴリのロケールカテゴリを決定するために使用されます。
LC_ALL
この変数は、ロケールカテゴリを指定するLANGおよびその他のLC_変数の値を上書きします。
LC_COLLATE
この変数は、パス名拡張の結果をソートする際に使用される照合順序を決定し、パス名展開とパターンマッチングの範囲式、等価クラス、および照合順序の動作を決定します。
LC_CTYPE
この変数は、文字の解釈と、パス名展開とパターンマッチングにおける文字クラスの振る舞いを決定します。
LC_MESSAGES
この変数は、 $で始まる二重引用符で囲まれた文字列の翻訳に使用されるロケールを決定します。
LC_NUMERIC
この変数は、数値書式設定に使用されるロケールカテゴリを決定します。
ライン
select組み込みコマンドによって使用され、 選択リストを印刷する列の長さを決定します。 SIGWINCHの受信時に自動的に設定されます。
郵便物
このパラメーターがファイル名に設定されていて、 MAILPATH変数が設定されていない場合、 bashは指定されたファイルにメールが到着したことをユーザーに通知します。
MAILCHECK
bashチェックの頻度を秒単位で指定します。 デフォルトは60秒です。 メールをチェックするときは、シェルはプライマリプロンプトを表示する前にそれを行います。 この変数が設定されていないか、または0以上の数値に設定されていない場合、シェルはメール検査を無効にします。
MAILPATH
メールをチェックするファイル名のコロンで区切られたリスト。 メールが特定のファイルに到着したときに出力されるメッセージは、ファイル名を `? 'で区切って指定することができます。 メッセージのテキストで使用すると、 $ _は現在のメールファイルの名前に展開されます。 例:
MAILPATH = '/ var / mail / bfox? "メールがあります:"〜/ shell-mail? "$ _ have mail!"
Bashはこの変数のデフォルト値を提供しますが、使用するユーザーメールファイルの場所はシステムに依存します(例:/ var / mail / $ USER )。
OPTERR
値1に設定すると、 bashはgetopts組み込みコマンド(以下のシェル組み込みコマンドを参照)によって生成されたエラーメッセージを表示します。 OPTERRは、シェルが呼び出されるたびに、またはシェルスクリプトが実行されるたびに1に初期化されます。
パス
コマンドの検索パス。 コロンで区切られたディレクトリのリストで、シェルはコマンドを探します(下記のコマンド実行を参照してください)。 デフォルトのパスはシステムに依存し、 bashをインストールする管理者によって設定されます。 共通の値は `` / usr / gnu / bin:/ usr / local / bin:/ usr / ucb:/ bin:/ usr / bin:です。
POSIXLY_CORRECT
この変数がbashの起動時に環境にある場合、シェルは--posix呼び出しオプションが指定されたかのように、起動ファイルを読み取る前にposixモードに入ります 。 シェルの実行中にbashが設定されている場合、コマンドset -o posixが実行されたかのように、 bashはposixモードを有効にします 。
PROMPT_COMMAND
設定されている場合、各プライマリプロンプトを発行する前に、その値がコマンドとして実行されます。
PS1
このパラメータの値は展開され(下記のPROMPTINGを参照)、プライマリプロンプト文字列として使用されます。 デフォルト値は `` \ s- \ v \ $ ''です。
PS2
このパラメータの値は、 PS1と同様に拡張され、セカンダリプロンプト文字列として使用されます。 デフォルトは `` > ''です。
PS3
このパラメータの値は、 selectコマンドのプロンプトとして使用されます(上記のSHELL GRAMMARを参照)。
PS4
このパラメータの値はPS1と同様に展開され、実行トレース中に各コマンドbashが表示される前に値が出力されます。 PS4の最初の文字は、必要に応じて複数回複製され、複数レベルの間接指示を示します。 デフォルトは `` + ''です。
TIMEFORMAT
このパラメータの値は、 時間予約語を先頭に持つパイプラインのタイミング情報をどのように表示するかを指定する書式文字列として使用されます。 %文字は、時間値またはその他の情報に展開されるエスケープシーケンスを導入します。 エスケープシーケンスとその意味は次のとおりです。 中括弧は任意の部分を示す。
%%
リテラル% 。
%[ p ] [l] R
経過時間(秒)。
%[ p ] [l] U
ユーザーモードで費やされたCPU秒数。
%[ p ] [l] S
システムモードで費やされたCPU秒数。
%P
CPU%は、(%U +%S)/%Rとして計算されます。
オプションのpは、 精度 、小数点以下の小数点以下の桁数を指定する数字です。 値が0の場合、小数点または小数は出力されません。 小数点以下3桁まで指定できます。 3より大きいpの値は3に変更されます。pが指定されない場合、値3が使用されます。
オプションのlは、 MM m SSという形式のより長い形式(分を含む)を指定します。 FF s。 pの値は、分数が含まれるかどうかを決定します。
この変数が設定されていない場合、 bashは$ '\ nreal \ t%3lR \ nuser \ t%3lU \ nsys%3lS'という値を持つかのように動作します。 値がNULLの場合、タイミング情報は表示されません。 書式文字列が表示されているときに改行文字が追加されます。
TMOUT
0より大きい値に設定されている場合、 TMOUTは読み込み組み込みのデフォルトのタイムアウトとして扱われます。 ターミナルからの入力時にTMOUT秒後に入力が到着しない場合、 selectコマンドは終了します 。 対話型シェルでは、この値は、1次プロンプトの発行後に入力を待機する秒数として解釈されます。 入力が届かない場合、その秒数を待って終了します。
auto_resume
この変数は、シェルがユーザーおよびジョブ制御とどのように対話するかを制御します。 この変数が設定されている場合、リダイレクションのない単一単語の単純コマンドは、既存の停止したジョブの再開の候補として扱われます。 あいまいさは許されません。 入力された文字列で始まる複数のジョブがある場合、最も最近アクセスしたジョブが選択されます。 このコンテキストで停止したジョブの名前は、開始するために使用されるコマンドラインです。 値がexactに設定されている場合、指定された文字列は停止したジョブの名前と正確に一致する必要があります。 部分文字列に設定されている場合、指定された文字列は停止したジョブの名前の部分文字列と一致する必要があります。 部分文字列の値は、 %?と同様の機能を提供します。 ジョブ識別子(下記のジョブコントロールを参照)。 他の値に設定されている場合、指定された文字列は停止したジョブ名の接頭辞でなければなりません。 これは%ジョブ識別子に似た機能を提供します。
ヒストリカル
履歴拡張とトークン化を制御する2つまたは3つの文字(下記の歴史の展開を参照)。 最初の文字は履歴拡張文字です。文字は履歴拡張の開始を知らせます。 ' 2番目の文字はクイック置換文字であり、入力された直前のコマンドを再実行するための略語として使用され、コマンド内の別の文字列に置き換えられます。 デフォルトは ` ^ 'です。 オプションの3番目の文字は、行の残りの部分が単語の最初の文字(通常は#)として見つかったときにコメントであることを示す文字です。 履歴コメント文字は、行の残りの単語について履歴置換をスキップします。 必ずしもシェルパーサーが残りの行をコメントとして扱うとは限りません。
配列
Bashは1次元の配列変数を提供します。 任意の変数を配列として使用できます。 組み込み宣言は明示的に配列を宣言します。 配列のサイズには最大限の制限はなく、メンバを連続して索引付けまたは割り当てする必要もありません。 配列は整数を使用して索引付けされ、ゼロベースです。
構文名 [ subscript ] = valueを使用して変数が割り当てられている場合、配列は自動的に作成されます 。 添え字は、0以上の数に評価される算術式として扱われます。 配列を明示的に宣言するには、 declare -a nameを使用し ます (以下のSHELL BUILTIN COMMANDSを参照)。 declare -a name [ subscript ]も受け入れられます。 添字は無視されます。 declareとreadonlyの組み込み関数を使用して、配列変数に属性を指定することができます。 各属性は、配列のすべてのメンバーに適用されます。
配列は、 name = (値1 ...値n )という形式の複合割り当てを使用するように割り当てられます。各値は[ subscript ] = stringの形式です。 文字列のみが必要です。 オプションの括弧と添え字が指定されている場合、そのインデックスはに割り当てられます。 それ以外の場合、割り当てられた要素のインデックスは、ステートメントによって割り当てられた最後のインデックス+ 1です。 インデックスはゼロから始まります。 この構文は、組み込み宣言によっても受け入れられます。 個々の配列要素は、上で紹介した名前 [ subscript ] = value構文を使用して割り当てることができます。
unset組み込み関数は、配列を破壊するために使用されます。 unset name [ subscript ]は、 添え字インデックスの配列要素を破棄します 。 unset name 、 nameは配列、 unset name [ subscript ]は添字が*または@で 、配列全体が削除されます。
declare 、 local 、およびreadonly組み込み関数はそれぞれ、配列を指定する-aオプションを受け取ります。 read組み込み関数は、 -aオプションを受け入れ、標準入力から読み込まれた単語のリストを配列に代入します。 setとdeclare組み込み関数は配列値を代入として再利用できるように表示します。
拡張
展開は、コマンドラインが単語に分割された後に実行されます。 中括拡張 、 ティルダ展開 、 パラメータと変数展開 、 コマンド置換 、 算術展開 、 単語分割 、 パス名展開の 7種類の展開が行われます 。
展開の順序は、中括拡張、ティルド展開、パラメータ、変数および算術展開、コマンド置換(左から右への変換)、単語分割、およびパス名展開です。
それをサポートできるシステムでは、追加の拡張が利用可能です: プロセス置換 。
ブレース拡張
ブレース拡張は、任意の文字列が生成されるメカニズムです。 このメカニズムはパス名の拡張に似ていますが、生成されるファイル名は存在する必要はありません。 中括拡張されるパターンはオプションのプリアンブルの形をとり、中括弧の間にカンマで区切られた一連の文字列の後にオプションの追記文字が続きます。 プリアンブルは、中括弧内に含まれる各文字列の前に置かれ、ポストスクリプトは結果の各文字列に追加され、左から右に展開されます。
ブレース拡張は入れ子にされるかもしれません。 展開された各ストリングの結果はソートされません。 左から右への順序が保持されます。 例えば、a { d、c、b }は `ade ace abe 'に展開されます。
ブレース拡張は他の拡張の前に実行され、他の拡張に特有の文字は結果に保存されます。 それは厳密にテキストです。 Bashは、拡張のコンテキストまたは中括弧の間のテキストに構文的解釈を適用しません。
この構造体は、生成される文字列の共通接頭辞が上記の例よりも長い場合には、通常、省略形として使用されます。
mkdir / usr / local / src / bash / {古い、新しい、dist、バグ}
または
chown root /usr/{ucb/{ex,edit},lib/{ex?.*,how_ex}}
ブレース拡張は、歴史的なshのバージョンとのわずかな互換性をもたらします。 shは、単語の一部として表示されているときに、中括弧を特別に扱わず、出力にそれらを保持します。 Bashは中括弧拡張の結果として中括弧を単語から削除します。 たとえば、 ファイル{1,2}としてshに入力された単語は、出力に同じように表示されます。 bashによる展開後、同じ単語がfile1 file2として出力されます。 shとの厳密な互換性が必要な場合は、 + Bオプションを付けてbashを開始するか、 setコマンドの+ Bオプションを使用してブレース拡張を無効にします(下記のシェルビルドコマンドを参照)。
チルドの拡張
単語が引用符で囲まれていないチルダ文字( ` 〜 ')で始まる場合、最初の引用符で囲まれていないスラッシュの前にあるすべての文字(または引用符で囲まれていないスラッシュがない場合はすべての文字)がチルダプレフィックスとみなされます 。 チルダプレフィックスの文字が引用符で囲まれていない場合、チルダに続くチルダプレフィックスの文字は、可能なログイン名として扱われます 。 このログイン名がヌル文字列の場合、チルダはシェルパラメータHOMEの値に置き換えられます。 HOMEが設定されていない場合、代わりにシェルを実行しているユーザのホームディレクトリが代入されます。 それ以外の場合、tilde-prefixは、指定されたログイン名に関連付けられたホームディレクトリに置き換えられます。
tilde-prefixが `〜+ 'の場合、シェル変数PWDの値がチルダ - プレフィックスを置き換えます。 チルダプレフィックスが `〜 - 'の場合は、シェル変数OLDPWDの値が設定されていればその値が代入されます。 チルダプレフィックス内のチルダに続く文字が数字Nで構成され、オプションでプレフィックスが `+ 'または` - 'の場合、チルダプレフィックスはディレクトリスタックの対応する要素に置き換えられます引数としてチルドプレフィックスを伴って呼び出された組み込みのdirによって呼び出されます。 チルダプレフィックス内のチルダに続く文字が先頭に `+ 'または` - 'のない数字で構成されている場合、 `+ 'が仮定されます。
ログイン名が無効であるか、ティルダ拡張が失敗した場合、その単語は変更されません。
各変数の代入は、a :または=の直後の引用符のないチルダ接頭辞についてチェックされます。 これらの場合、チルダ展開も実行されます。 その結果、 PATH 、 MAILPATH 、およびCDPATHへの割り当てにチルダ付きのファイル名を使用することができ、シェルは展開された値を割り当てます。
パラメータの拡張
` $ '文字は、パラメータ拡張、コマンド置換、または算術拡張を導入します。 展開されるパラメータ名またはシンボルは、省略可能な中括弧で囲むことができますが、名前の一部として解釈できる直後の文字から展開する変数を保護する役割を果たします。
中括弧が使用されている場合、マッチする末尾の中括弧は、バックスラッシュまたは引用符で囲まれた文字列でエスケープされず、埋め込み算術展開、コマンド置換、またはパラメータ拡張ではエスケープされない最初の ` } 'です。
パラメータの値が代入されます。 中かっこは、 parameterが2桁以上の位置パラメータである場合、またはパラメータの後にその名前の一部として解釈されない文字が続く場合に必要です。
以下の各ケースでは、 単語はチルダ展開、パラメータ展開、コマンド置換、および算術展開の対象となります。 部分文字列展開を実行しないときは、未設定またはnullのパラメータのbashテストを行います。 コロンを省略すると、設定されていないパラメータに対してのみテストが行われます。
デフォルト値を使用します 。 パラメータが設定されていないか、またはnullの場合、 単語の展開が置換されます。 それ以外の場合は、 parameterの値が代入されます。
デフォルト値を割り当てます 。 parameterが設定されていないかnullの場合、 wordの展開はパラメータに代入されます 。 その後、 パラメータの値が代入されます。 このようにして位置パラメータと特殊パラメータを割り当てることはできません。
NullまたはUnsetの場合はエラーを表示します。 パラメータがヌルまたは設定されていない場合、 単語 (または単語が存在しない場合はそのメッセージへのメッセージ)の展開が標準エラーに書き込まれ、シェルは対話的でない場合は終了します。 それ以外の場合は、 parameterの値が代入されます。
代替値を使用する 。 parameterがnullまたはunsetの場合、何も代入されず、そうでない場合はwordの展開が代入されます。
名前が接頭辞で始まり、 IFS特殊変数の最初の文字で区切られた変数の名前に展開されます。
parameterの値の文字の長さが代用されます。 パラメータが*または@の場合、置換された値は位置パラメータの数です。 parameterが*または@で添字付けされた配列名の場合、置換された値は配列内の要素の数です。
パス名の展開と同じように、 単語が展開されてパターンが生成されます。 パターンがパラメータの値の先頭に一致する場合、展開の結果は、最も短い一致パターン( `` # ''の場合)または最も長い一致パターン( `` ## ' 'の場合)が削除されました。 パラメータが@または*の場合、パターン削除操作が各位置パラメータに順番に適用され、展開が結果リストになります。 parameterが@または*で添字付けされた配列変数の場合、パターン削除操作が配列の各メンバーに順番に適用され、展開が結果リストになります。
パス名の展開と同じように、 単語が展開されてパターンが生成されます。 パターンがパラメータの展開された値の末尾の部分と一致する場合、展開の結果は、最も短い一致パターン( `` % ''の大文字)または最も長い一致パターン( `` % % '')が削除されました。 パラメータが@または*の場合、パターン削除操作が各位置パラメータに順番に適用され、展開が結果リストになります。 parameterが@または*で添字付けされた配列変数の場合、パターン削除操作が配列の各メンバーに順番に適用され、展開が結果リストになります。
パス名の展開と同じようにパターンが展開されます。 パラメータが展開され、その値に対するパターンの最長一致がstringに置き換えられます 。 最初の形式では、最初の一致のみが置換されます。 2番目の形式は、 パターンのすべてのマッチを文字列に置き換えます 。 パターンが#で始まる場合は、 パラメータの展開された値の先頭に一致する必要があります 。 パターンが%で始まる場合は、 パラメータの展開された値の最後に一致する必要があります 。 stringがヌルの場合、 パターンの一致は削除され、 /後続のパターンは省略されます。 パラメーターが@または*の場合、置換操作は各位置パラメーターに順番に適用され、展開は結果リストになります。 parameterが@または*で添字付けされた配列変数である場合、置換操作が配列の各メンバーに順番に適用され、展開が結果リストになります。
コマンド置換
コマンド置換は、コマンド名の代わりにコマンド出力を許可します。 2つの形式があります。
$( コマンド )
または
` command`
Bashはコマンドを実行し、コマンド置換をコマンドの標準出力に置き換え、末尾に改行を削除して拡張を実行します。 埋め込み改行は削除されませんが、単語分割中に削除される可能性があります。 コマンド置換$(cat ファイル )は、同等ではあるが高速な$(< ファイル )で置き換えることができます 。
古いスタイルのバッククォート形式の置換が使用されている場合、バックスラッシュは$ 、 ` 、または\の後に続く場合を除いてリテラルの意味を保持します。 バックスラッシュの前にない最初のバッククォートは、コマンド置換を終了します。 $( コマンド )形式を使用すると、括弧内のすべての文字がコマンドを構成します。 特別に扱われるものはありません。
コマンドの置換はネストされることがあります。 バッククォートされたフォームを使用するときにネストするには、内側のバッククォートをバックスラッシュでエスケープします。
置換が二重引用符で囲まれていると、単語の分割とパス名の展開は結果に対して実行されません。
算術拡張
算術展開では、算術式の評価と結果の置換が可能です。 算術展開の形式は次のとおりです。
$(( 式 ))
式は二重引用符内にあるかのように扱われますが、かっこ内の二重引用符は特別に扱われません。 式のすべてのトークンは、パラメータ拡張、文字列展開、コマンド置換、および見積りの削除を受けます。 算術置換はネストすることができます。
評価は、以下の算術評価の規則に従って行われます。 expressionが無効な場合、 bashは失敗を示すメッセージを出力し、置換は行われません。
プロセス置換
プロセス置換は、名前付きパイプ( FIFO )をサポートするシステム、またはオープンファイルの名前を付ける/ dev / fdメソッドでサポートされています。 <( list )または>( list )の形式をとります。 プロセスリストは、その入力または出力がFIFOまたは/ dev / fd内のあるファイルに接続されて実行されます。 このファイルの名前は、展開の結果として現在のコマンドに引数として渡されます。 >( リスト )フォームが使用されている場合、ファイルへの書き込みはリストの入力を提供します 。 <( リスト )形式を使用する場合、引数として渡されたファイルは、 listの出力を得るために読み込まれなければなりません。
使用可能な場合、プロセス置換は、パラメーターおよび変数の拡張、コマンド置換、および算術拡張と同時に実行されます。
ワードスプリット
シェルは、 単語の二重引用符で囲まれていないパラメータ拡張、コマンド置換、算術展開の結果をスキャンします。
シェルはIFSの各文字を区切り文字として扱い、他の拡張の結果をこれらの文字の単語に分割します。 IFSが設定されていない場合、またはその値がまさに
明示的なヌル引数( ""または"' )は保持されます。 値を持たないパラメータの拡張の結果として、引用符で囲まれていない暗黙のヌル引数は削除されます。 値のないパラメータが二重引用符で囲まれている場合、null引数が返され、保持されます。
展開が行われない場合、分割は実行されないことに注意してください。
パス名の拡張
単語の分割後、 -fオプションが設定されていない限り、 bashは各単語に* 、? 、および[ 。 これらの文字のいずれかが表示された場合、その単語はパターンとみなされ、 パターンに一致するファイル名のアルファベット順ソートリストに置き換えられます。 一致するファイル名が見つからず、シェルオプションnullglobが無効になっている場合、その単語は変更されません。 nullglobオプションが設定され、一致するものが見つからない場合、その単語は削除されます。 シェルオプションnocaseglobを有効にすると、アルファベット文字の大文字と小文字を区別せずに一致が実行されます。 パス名展開にパターンを使用する場合、シェルオプションのdotglobが設定されていない限り、名前の先頭またはスラッシュの直後の文字``。 ''を明示的に一致させる必要があります。 パス名をマッチさせる場合、スラッシュ文字は常に明示的に一致させる必要があります。 それ以外の場合、 ``。 ''文字は特別に扱われません。 nocaseglob 、 nullglob 、およびdotglobシェルオプションについては、 SHELL BUILTIN COMMANDSの下のshoptの説明を参照してください。
GLOBIGNOREシェル変数を使用して、 パターンに一致するファイル名のセットを制限することができます。 GLOBIGNOREが設定されている場合、 GLOBIGNOREのパターンの1つにも一致する各ファイル名が一致するリストから削除されます。 GLOBIGNOREが設定されていても、ファイル名``。 ''と`` .. ''は常に無視されます。 しかし、 GLOBIGNOREを設定すると、 ドットグローブシェルオプションを有効にする効果があるので、 ``。 ''で始まる他のファイル名はすべて一致します。 ``。 ''で始まるファイル名を無視するという古い振る舞いを得るためには、 GLOBIGNOREのパターンの 1つを`` * * ''にしてください 。 GLOBIGNOREが設定されていない場合、 ドット グロブオプションは無効になります。
パターンマッチング
以下に説明する特殊なパターン文字以外のパターンに現れる文字は、それ自身と一致します。 NUL文字はパターンには現れません。 特別なパターン文字は、文字通り一致させる場合は引用符で囲む必要があります。
特殊なパターン文字の意味は次のとおりです。
*
ヌル文字列を含む任意の文字列に一致します。
?
任意の1文字に一致します。
[...]
囲まれた文字のいずれかに一致します。 ハイフンで区切られた1対の文字は、 範囲式を表します。 現在のロケールの照合シーケンスと文字セットを使用して、それら2つの文字の間でソートされた文字が一致します。 [の後に続く最初の文字が! またはa ^の場合、囲まれていない文字は一致します。 範囲式の文字のソート順は、現在のロケールとLC_COLLATEシェル変数の値(設定されている場合)によって決まります。 A -は、セット内の最初の文字または最後の文字として組み込むことで一致させることができます。 A ]は、それをセットの最初の文字として含めることで一致させることができます。
[および]内では、 文字クラスは[: class :]という構文を使用して指定できます。classは、POSIX.2標準で定義されている次のクラスのいずれかです。
アルナムアルファベット空白cntrl数字グラフ下の印刷区画スペース上の単語xdigit
文字クラスは、そのクラスに属するすべての文字と一致します。 単語の文字クラスは、文字、数字、および文字_と一致します。
[および]内で、 等価クラスは、文字cと同じ照合重み(現在のロケールで定義されている)を持つすべての文字と一致する構文[= c =]を使用して指定できます。
[と]内では、構文[。 symbol 。]は照合シンボルシンボルと一致します。
shopt組み込み関数を使用してextglobシェルオプションを有効にすると、いくつかの拡張パターンマッチング演算子が認識されます。 以下の説明では、 パターンリストは、 |で区切られた1つ以上のパターンのリストである。 。 複合パターンは、以下のサブパターンの1つまたは複数を使用して形成することができる。
?( パターンリスト )
与えられたパターンの0回または1回のオカレンスと一致します。
*( パターンリスト )
与えられたパターンのゼロ個以上の出現にマッチします。
+( パターンリスト )
与えられたパターンの1つ以上の出現と一致します。
@( パターンリスト )
指定されたパターンの1つに正確に一致します。
!( パターンリスト )
与えられたパターンの1つ以外のものと一致する
見積もりの削除
前述の展開の後、上記の展開のいずれかの結果ではなかった\ 、 ' 、および"という文字の引用されていない出現はすべて削除されます。
リダイレクション
コマンドが実行される前に、その入力と出力は、シェルによって解釈される特別な表記法を使用してリダイレクトされます。 リダイレクトは、現在のシェル実行環境のファイルを開いたり閉じたりするためにも使用できます。 次のリダイレクション演算子は、 単純なコマンド内のどこに先行しても、どこにでも置くことも、 コマンドの後に置くこともできます。 リダイレクトは、左から右の順に処理されます。
以下の説明では、ファイル記述子番号が省略され、リダイレクション演算子の最初の文字が<の場合、リダイレクトは標準入力(ファイル記述子0)を参照します。 リダイレクション演算子の最初の文字が>の場合、リダイレクションは標準出力(ファイル記述子1)を参照します。
次の説明では、リダイレクション演算子に続く単語は、特に断りのない限り、中括拡張、チルダ展開、パラメータ展開、コマンド置換、算術展開、見積もり削除、パス名展開、および単語分割が行われます。 複数の単語に展開すると、 bashはエラーを報告します。
リダイレクションの順序は重要であることに注意してください。 たとえば、コマンド
ls > dirlist 2 >& 1
標準出力と標準エラーの両方をファイルdirlistに指示し、コマンド
ls 2 >& 1 > dirlist
標準出力がdirlistにリダイレクトされる前に標準エラーが標準出力として複製されたため、標準出力のみがファイルdirlistに送られます。
Bashは、次の表に示すように、リダイレクトで使用されたときに特別にいくつかのファイル名を処理します。
/ dev / fd / fd
fdが有効な整数の場合、ファイル記述子fdは複製されます。
/ dev / stdin
ファイル記述子0が複製されます。
/ dev / stdout
ファイル記述子1が複製されます。
/ dev / stderr
ファイル記述子2が複製されます。
/ dev / tcp / host / port
hostが有効なホスト名またはインターネットアドレスで、 portが整数のポート番号またはサービス名である場合、 bashは対応するソケットへのTCP接続を開こうとします。
/ dev / udp / host / port
hostが有効なホスト名またはインターネットアドレスで、 portが整数のポート番号またはサービス名である場合、 bashは対応するソケットへのUDP接続を開こうとします。
ファイルを開いたり作成しなかったりすると、リダイレクトが失敗します。
入力のリダイレクト
入力のリダイレクトは、ファイル記述子nの読み込みのために開かれた単語の拡張に由来する名前のファイル、またはnが指定されていない場合の標準入力(ファイル記述子0)を生成する。
入力をリダイレクトする一般的な形式は次のとおりです。
[ n ] < 単語
出力のリダイレクト
出力のリダイレクションは、ファイル記述子nへの書き込みのためにwordの展開によって生成された名前を持つファイル、またはnが指定されていない場合は標準出力(ファイル記述子1)を生成します。 ファイルが存在しない場合は作成されます。 それが存在する場合は、ゼロサイズに切り捨てられます。
出力をリダイレクトする一般的な形式は次のとおりです。
[ n ] > 単語
リダイレクション演算子が>で 、組み込みセットの noclobberオプションが有効になっている場合、 ワードの展開によって名前が付けられたファイルが通常のファイルである場合、リダイレクトは失敗します。 リダイレクション演算子が> | またはリダイレクション演算子が>で、 set builtinコマンドのnoclobberオプションが有効でない場合、 wordで指定されたファイルが存在する場合でもリダイレクトが試行されます。
リダイレクト出力の追加
このように出力をリダイレクトすると、ファイル記述子nに追加するためにwordの展開によって名前が付けられたファイル、またはnが指定されていない場合は標準出力(ファイル記述子1)が生成されます。 ファイルが存在しない場合は作成されます。
追加出力の一般的な形式は次のとおりです。
[ n ] >> 単語
標準出力と標準エラーのリダイレクト
Bashは、標準出力(ファイル記述子1)と標準エラー出力(ファイル記述子2)の両方を、この構造を持つ単語の拡張であるファイルにリダイレクトすることができます。
標準出力と標準エラーのリダイレクトには2つの形式があります。
&> 単語
そして
>& 単語
2つの形態のうち、第1の形態が好ましい。 これは意味的に
> 単語 2 >& 1
ここに書類
このタイプのリダイレクトは、 単語だけを含む行(末尾に空白がない)が表示されるまで、現在のソースから入力を読み込むようにシェルに指示します。 その時点までに読み込まれたすべての行は、コマンドの標準入力として使用されます。
here-documentsの形式は次のとおりです。
<< [ - ] word here - ドキュメント 区切り文字単語のパラメータ展開、コマンド置換、算術展開、パス名展開は行われません。 単語内の文字が引用されている場合、 区切り記号は単語の引用符の削除の結果であり、here-document内の行は展開されません。 wordが引用されていない場合、here-documentのすべての行は、パラメータ展開、コマンド置換、および算術展開の対象となります。 後者の場合、文字列\ <改行>は無視され、文字\ 、 $ 、および`を引用するには\を使用する必要があります。
リダイレクション演算子が<< - の場合、先頭のすべてのタブ文字は入力行および区切り文字を含む行から削除されます。 これにより、シェルスクリプト内のここの文書を自然な形で字下げすることができます。
ここでは弦
ここのドキュメントの一種で、フォーマットは次のとおりです。
<<< 単語ワードは拡張され、標準入力のコマンドに供給されます。
ファイル記述子の複製
リダイレクト演算子
[ n ] <& word
入力ファイル記述子を複製するために使用されます。 単語が1つ以上の数字に展開されると、 nで示されるファイル記述子はそのファイル記述子のコピーになります。 wordの数字が入力用に開いているファイル記述子を指定していない場合、リダイレクトエラーが発生します。 wordが-に評価された場合、ファイル記述子nは閉じられます。 nが指定されていない場合、標準入力(ファイル記述子0)が使用されます。
オペレーター
[ n ] >& 単語
出力ファイル記述子を複製するのと同様に使用されます。 nを指定しないと、標準出力(ファイル記述子1)が使用されます。 wordの数字が出力用に開いているファイル記述子を指定していない場合、リダイレクトエラーが発生します。 特殊なケースとして、 nが省略され、 wordが1桁以上に拡張されない場合、標準出力と標準エラーは前述のようにリダイレクトされます。
ファイル記述子の移動
リダイレクト演算子
[ n ] <& digit -
ファイルディスクリプタの数字をファイルディスクリプタnに 、またはnが指定されていない場合は標準入力(ファイルディスクリプタ0)に移動します。 数字はnに複製された後に閉じられます。
同様に、リダイレクト演算子
[ n ] >& 数字 -
ファイルディスクリプタの数字をファイルディスクリプタnに 、またはnが指定されていない場合は標準出力(ファイルディスクリプタ1)に移動します。
読み取りと書き込みのためのファイル記述子を開く
リダイレクト演算子
[ n ] <> 単語
ファイル記述子nの読み込みと書き込みの両方に開かれるワードの拡張子であるファイル、またはnが指定されていない場合はファイル記述子0のファイル名を開きます。 ファイルが存在しない場合は作成されます。
エイリアス
エイリアスは、単純なコマンドの最初の単語として使用されるときに、単語の代わりに文字列を使用できるようにします。 シェルは、 エイリアスとunalias組み込みコマンドで設定および設定解除できるエイリアスのリストを保持します(以下のシェルビルドコマンドを参照してください)。 引用されていない場合は、各コマンドの最初の単語がチェックされ、エイリアスがあるかどうかが確認されます。 そうであれば、その単語はエイリアスのテキストに置き換えられます。 エイリアス名と置換テキストには、エイリアス名に=が含まれないことを除いて、上記のメタキャラクタを含む有効なシェル入力が含まれている場合があります。 置換テキストの最初の単語はエイリアスがテストされますが、展開されるエイリアスと同一の単語は2度目に展開されません。 つまり、 lsをls -Fにエイリアスすることができ、 bashは置換テキストを再帰的に展開しようとしません。 エイリアス値の最後の文字が空白の場合、エイリアスに続く次のコマンドワードもエイリアス展開のためにチェックされます。
エイリアスは、 aliasコマンドで作成およびリストされ、 unaliasコマンドで削除されます。
置換テキストに引数を使用するメカニズムはありません。 引数が必要な場合は、シェル関数を使用する必要があります(下記の関数を参照)。
expand_aliasesシェルオプションがshopt (シェルビルドコマンドの下のshoptの説明を参照)を使用して設定されていない限り、シェルが対話的でない場合、エイリアスは展開されません。
エイリアスの定義と使用に関する規則は多少混乱します。 Bashは、その行のコマンドを実行する前に、少なくとも1つの完全な入力行を読み込みます。 エイリアスは、コマンドが実行されたときではなく読み込まれたときに展開されます。 したがって、別のコマンドと同じ行に表示されるエイリアス定義は、次の入力行が読み取られるまで有効になりません。 その行のエイリアス定義に続くコマンドは、新しいエイリアスの影響を受けません。 この動作は、関数が実行されるときにも問題となります。 関数定義が読み込まれるとエイリアスが展開され、関数が実行されるときはエイリアスが展開されません。これは、関数定義自体が複合コマンドであるためです。 その結果、関数で定義されたエイリアスは、その関数が実行されるまで利用できません。 安全のためには、常に別名を別の行に入れ、複合コマンドでエイリアスを使用しないでください。
ほとんどの場合、エイリアスはシェル関数に取って代わられます。
機能
SHELL GRAMMARに記載されているように定義されたシェル関数は、後で実行するための一連のコマンドを格納します。 シェル関数の名前が単純なコマンド名として使用されると、その関数名に関連付けられたコマンドのリストが実行されます。 関数は現在のシェルのコンテキストで実行されます。 それらを解釈するための新しいプロセスは作成されません(これはシェルスクリプトの実行とは対照的です)。 関数が実行されると、関数の引数はその実行中の位置パラメータになります。 特別なパラメータ#は、変更を反映するように更新されます。 位置パラメータ0は変更されません。 FUNCNAME変数は、関数の実行中に関数の名前に設定されます。 シェル実行環境の他のすべての側面は、関数とその呼び出し元の間では同じですが、 DEBUGトラップ(以下のSHELL BUILTIN COMMANDの組み込みトラップの説明を参照してください)は継承されません。下記の宣言の説明を参照してください)。
関数のローカル変数は、 ローカルの組み込みコマンドで宣言することができます。 通常、変数とその値は関数とその呼び出し元で共有されます。
組み込みコマンドの戻り値が関数内で実行された場合、関数は完了し、関数呼び出しの次のコマンドで実行を再開します。 関数が完了すると、位置パラメータと特殊パラメータ#の値は、関数が実行される前の値に復元されます。
関数名と定義は、 declareまたはtypeset組み込みコマンドに-fオプションを付けてリストすることができます。 declareまたはtypesetする-Fオプションは、関数名のみをリストします。 関数をエクスポートして、サブシェルがエクスポート組み込みに対して-fオプションを使用して自動的に定義されるようにすることができます。
関数は再帰的である可能性があります。 再帰呼び出しの回数に制限はありません。
算術評価
シェルは、特定の状況下で算術式の評価を可能にします( let組み込みコマンドと算術展開を参照)。 評価はオーバーフローのチェックなしで固定幅の整数で行われますが、0による除算はトラップされ、エラーとしてフラグが立てられます。 演算子とその優先順位と連想はC言語と同じです。 以下の演算子のリストは、等優先演算子のレベルにグループ化されています。 レベルは優先順位の低い順にリストされます。
id ++ id -
可変ポストインクリメントとポストデクリメント
++ id - id
変数のプリインクリメントとプリデクリメント
- +
単項マイナスプラス
! 〜
論理的およびビット単位の否定
**
累乗
* /%
乗算、除算、剰余
+ -
加算、減算
<< >>
左右のビットシフト
<=> = <>
比較
==!=
平等と不平等
そして、
ビット単位AND
^
ビット単位の排他的論理和
|
ビット単位OR
&&
論理AND
||
論理OR
expr ? expr : expr
条件付き評価
= = = = = = = = = = << = >> =&= ^ = = =
割り当て
expr1 、 expr2
コンマ
シェル変数はオペランドとして使用できます。 式が評価される前にパラメータ拡張が実行されます。 式の中で、シェル変数は、パラメータ展開構文を使用せずに名前で参照することもできます。 変数の値は、参照時に算術式として評価されます。 シェル変数は、式で使用するために整数属性をオンにする必要はありません。
0の先頭にある定数は、8進数として解釈されます。 先頭の0xまたは0Xは16進数を示します。 それ以外の場合、数値は[ base# ] nの形式をとり、 baseは算術ベースを表す2〜64の10進数で、 nはそのベースの数値です。 base#を省略すると、base 10が使用されます。 9より大きい数字は、小文字、大文字、@、および_の順で表されます。 基数が36以下の場合は、小文字と大文字を交換可能に使用して10〜35の数字を表すことができます。
演算子は優先順位の順に評価されます。 カッコ内の部分式は最初に評価され、上記の優先順位ルールを上書きすることができます。
条件式
条件式は[[複合コマンドとテストと[組み込みコマンド]でファイル属性をテストし、文字列と算術の比較を実行するために使用されます。 式は、以下の単項または二項の原色から形成されます。 プライマリのいずれかへのファイル引数が/ dev / fd / nの形式であれば、ファイル記述子nがチェックされます。 いずれかのプライマリへのfile引数が/ dev / stdin 、 / dev / stdout 、または/ dev / stderrのいずれかである場合、それぞれファイル記述子0,1または2がチェックされます。
- ファイル
ファイルが存在する場合はtrue。
-b ファイル
ファイルが存在し、ブロック特殊ファイルであれば真。
-c ファイル
ファイルが存在し、文字特殊ファイルであれば真。
-d ファイル
ファイルが存在し、ディレクトリの場合は真です。
-e ファイル
ファイルが存在する場合はtrue。
-f ファイル
ファイルが存在し、通常のファイルであれば真。
-g ファイル
ファイルが存在し、set-group-idの場合は真です。
-h ファイル
ファイルが存在し、シンボリックリンクである場合はtrue。
-k ファイル
ファイルが存在し、 `` sticky ''ビットがセットされている場合は真です。
-p ファイル
ファイルが存在し、名前付きパイプ(FIFO)であれば真。
-r ファイル
ファイルが存在し、読み取り可能な場合はtrue。
-s ファイル
ファイルが存在し、サイズがゼロより大きい場合はtrue。
-t fd
ファイル記述子fdが開いていて、端末を参照している場合は真です。
-u ファイル
ファイルが存在し、そのset-user-idビットが設定されている場合は真です。
-w ファイル
ファイルが存在し、書き込み可能な場合はtrue。
-x ファイル
ファイルが存在し、実行可能である場合はtrue。
-O ファイル
ファイルが存在し、実効ユーザーIDが所有している場合は真です。
-G ファイル
ファイルが存在し、実効グループIDによって所有されている場合は真です。
-L ファイル
ファイルが存在し、シンボリックリンクである場合はtrue。
-S ファイル
ファイルが存在し、ソケットであれば真。
-N ファイル
ファイルが存在し、最後に読み込まれてから変更されている場合はTrueです。
file1 - nt ファイル2
file1がfile2より新しい(変更日による)場合、またはfile1が存在し、file2がfile2でない場合は真です。
file1 - ot ファイル2
file1がfile2よりも古い場合、またはfile2が存在し、 file1が存在しない場合は真です。
ファイル1 -ef ファイル2
file1とfile2が同じデバイスとiノード番号を参照する場合は真です。
-o optname
シェルオプションoptnameが有効な場合はtrue。 以下の組み込みセットの -oオプションの説明にあるオプションのリストを参照してください。
-z 文字列
stringの長さがゼロの場合はtrue。
-n 文字列
文字列
文字列の長さがゼロでない場合はtrue。
string1 == string2
文字列が等しい場合はtrue。 厳密なPOSIX準拠の場合、 ==の代わりに=を使用できます。
string1 != string2
文字列が等しくない場合はtrue。
string1 < string2
文字列1が現在のロケールで文字列2の辞書的にソートされる場合はtrue。
string1 > string2
現在のロケールでstring2が辞書順にソートされた場合はtrueを返します。
arg1 OP arg2
OPは-eq 、 -ne 、 -lt 、 -le 、 -gt 、または-geのいずれかです。 これらの算術バイナリ演算子は、 arg1がarg2と等しいか、等しくないか、より小さいか、より小さいか等しいかより大きいか、またはより大きいか、 arg2と等しいかそれより大きい場合にtrueを返します。 Arg1およびarg2は、正または負の整数であってもよい。
単純なコマンドの拡張
単純なコマンドが実行されると、シェルは次の展開、割り当て、およびリダイレクトを左から右へ実行します。
1。
パーサーが変数代入(コマンド名に先行するもの)およびリダイレクトとしてマークした単語は、後で処理するために保存されます。
2。
変数の割り当てやリダイレクトではない単語が展開されます。 拡張後に残っている単語があれば、最初の単語がコマンドの名前になり、残りの単語が引数になります。
3。
リダイレクトは、前述のリダイレクトで実行されます。
4。
各変数代入の=の後のテキストは、変数に代入される前に、ティルド展開、パラメータ展開、コマンド置換、算術展開、および引用の削除が行われます。
コマンド名がなければ、変数の割り当ては現在のシェル環境に影響します。 それ以外の場合、変数は実行されたコマンドの環境に追加され、現在のシェル環境には影響しません。 いずれかの割り当てが読み取り専用変数に値を割り当てようとすると、エラーが発生し、コマンドはゼロ以外の状態で終了します。
コマンド名が指定されていない場合、リダイレクトが実行されますが、現在のシェル環境には影響しません。 リダイレクトエラーにより、コマンドは0以外のステータスで終了します。
展開後にコマンド名が残っている場合は、以下のように実行されます。 それ以外の場合、コマンドは終了します。 拡張の1つにコマンド置換が含まれている場合、コマンドの終了ステータスは最後に実行されたコマンド置換の終了ステータスです。 コマンドの置換がなかった場合、コマンドはゼロの状態で終了します。
コマンド実行
コマンドが単語に分割された後、単純なコマンドとオプションの引数リストが得られると、以下のアクションが実行されます。
コマンド名にスラッシュが含まれていない場合、シェルはそれを見つけようとします。 その名前のシェル関数が存在する場合、関数は上で説明したように関数で呼び出されます。 名前が関数と一致しない場合、シェルはシェル組み込み関数のリストでその名前を検索します。 一致するものが見つかった場合は、その組み込み関数が呼び出されます。
名前がシェル関数でもビルトインでもなく、スラッシュを含まない場合、 bashはPATHの各要素を、その名前の実行可能ファイルを含むディレクトリとして検索します。 Bashは、実行可能ファイルの完全なパス名を記憶するためにハッシュテーブルを使用します(下記のシェルビルドコマンドの ハッシュを参照してください)。 PATH内のディレクトリの完全な検索は、コマンドがハッシュテーブルに見つからない場合にのみ実行されます。 検索に失敗した場合、シェルはエラーメッセージを出力し、終了ステータス127を返します。
検索が成功した場合、またはコマンド名に1つ以上のスラッシュが含まれている場合、シェルは別の実行環境で指定されたプログラムを実行します。 引数0は指定された名前に設定され、残りの引数は指定された引数に設定されます。
ファイルが実行可能形式でなく、ファイルがディレクトリではないためにこの実行が失敗した場合、 シェルスクリプト 、つまりシェルコマンドを含むファイルとみなされます。 サブシェルはそれを実行するために生成されます。 このサブシェルはそれ自体を再初期化するので、親によって記憶されたコマンドの位置( SHELL BUILTIN COMMANDSの下のハッシュを参照)が子によって保持される点を除いて、スクリプトを処理するために新しいシェルが呼び出されたかのようになります。
プログラムが#!で始まるファイルの場合 最初の行の残りの部分はプログラムのためのインタプリタを指定します。 シェルは、この実行形式を処理しないオペレーティングシステム上で、指定されたインタプリタを実行します。 インタプリタへの引数は、プログラムの最初の行にあるインタプリタ名に続く1つのオプションの引数と、それに続くプログラムの名前と、それに続くコマンド引数(存在する場合)で構成されます。
実行環境のコマンド
シェルには実行環境があり、 実行環境は次のもので構成されています。
*
実行時にシェルによって継承されたファイルをオープンします。exec組み込み関数に供給されるリダイレクションによって変更されます。
*
cd 、 pushd 、またはpopdで設定された現在の作業ディレクトリ、または起動時にシェルによって継承されたディレクトリ
*
umaskによって設定されるファイル作成モードのマスク、またはシェルの親から継承される
*
トラップによって設定された現在のトラップ
*
変数の代入によって設定されるか、環境内のシェルの親から設定されるか継承されるシェルパラメータ
*
実行中に定義された、または環境内のシェルの親から継承されたシェル関数
*
呼び出し時に有効にされるオプション(デフォルトまたはコマンドライン引数のいずれか)、またはset
*
shoptによって有効になっているオプション
*
エイリアスで定義されたシェルエイリアス
*
バックグラウンドジョブのものを含む様々なプロセスID、 $$の値、 $ PPIDの値
組み込み関数またはシェル関数以外の単純なコマンドを実行する場合は、次のような別の実行環境で呼び出されます。 特記のない限り、値はシェルから継承されます。
*
シェルのオープンファイル、およびコマンドへのリダイレクトによって指定された変更と追加
*
現在の作業ディレクトリ
*
ファイル作成モードのマスク
*
エクスポート用にマークされたシェル変数、コマンド用にエクスポートされた変数、環境で渡された変数
*
シェルによって捕捉されたトラップは、シェルの親から継承された値にリセットされ、シェルによって無視されたトラップは無視されます
この独立した環境で呼び出されたコマンドは、シェルの実行環境に影響を与えることはできません。
コマンド置換と非同期コマンドは、シェル環境で複製されたサブシェル環境で呼び出されますが、シェルで捕捉されたトラップは、シェルが起動時に親から継承した値にリセットされます。 パイプラインの一部として呼び出される組み込みコマンドも、サブシェル環境で実行されます。 サブシェル環境に対する変更は、シェルの実行環境に影響を与えることはできません。
コマンドの後に&とジョブ制御が有効でない場合、コマンドのデフォルトの標準入力は空のファイル/ dev / nullです。 それ以外の場合、呼び出されたコマンドは、呼び出し元シェルのファイル記述子をリダイレクトによって変更されたものとして継承します。
関連項目
Bashリファレンスマニュアル 、Brian Fox、Chet Ramey
Gnu Readlineライブラリ 、Brian Fox、Chet Ramey
Gnuの歴史図書館 、ブライアン・フォックス、チェット・ラメイ
ポータブルオペレーティングシステムインタフェース(POSIX)パート2:シェルとユーティリティ 、IEEE
sh (1)、 ksh (1)、 csh (1)
emacs (1)、 vi (1)
readline (3)