Ash - Linuxコマンド - Unixコマンド

sh - コマンドインタプリタ( シェル

シノプシス

sh [ - / + aCefnuvxIimqsVEbc ] [ - o ロングネーム ] - ワード[ ターゲット... ]

DESCRIPTION

Shはシステムの標準コマンドインタープリタです。 現在のバージョンのshは、シェルのPOSIX 1003.2および1003.2a仕様に準拠するように変更されています。 このバージョンにはいくつかの点でKornシェルと似たような多くの機能がありますが、Kornシェルクローンではありません(ksh(1)を参照)。 このシェルにはPOSIXといくつかのBerkeley拡張機能によって指定された機能だけが組み込まれています。 4.4 BSDがリリースされるまでにPOSIXへの準拠が期待されます。 このマニュアルページは、チュートリアルやシェルの完全な仕様ではありません。

概要

シェルは、ファイルまたは端末のいずれかから行を読み込み、解釈し、一般に他のコマンドを実行するコマンドです。 ユーザーがシステムにログインするときに実行されるプログラムです(ユーザーがchsh(1)コマンドで別のシェルを選択することもできます)。 シェルは、フロー制御構造を持つ言語を実装しています。マクロ機能は、データストレージに加えてさまざまな機能を提供し、履歴と行編集機能も組み込まれています。 インタラクティブな使用を支援するための多くの機能が組み込まれており、インタラクティブおよび非インタラクティブな使用(シェルスクリプト)の両方に共通の解釈言語があるという利点があります。 つまり、コマンドは実行中のシェルに直接入力することも、ファイルに入れることもでき、シェルが直接実行することもできます。

呼び出し

argが存在せず、シェルの標準入力が端末に接続されている場合(または-iフラグが設定されている場合)、- cオプションが存在しない場合、シェルは対話シェルとみなされます 。 対話型シェルは、一般に各コマンドの前にプロンプ​​トを表示し、プログラミングとコマンドのエラーを別々に処理します(後述)。 最初の起動時にシェルは引数0を検査し、ダッシュ ` - 'で始まる場合はシェルもログインシェルとみなされます。 これは、通常、ユーザーが最初にログインしたときにシステムによって自動的に行われます。ログインシェルは、/ etc / profileファイルと.profileファイルからコマンドを読み込みます。 環境変数ENVがシェルへのエントリ時に設定されている場合、またはログインシェルの.profileに設定されている場合、シェルは次にENVで指定されたファイルからコマンドを読み込みます。したがって、実行するコマンドは、 .profileファイルのログイン時間、およびENVファイル内のすべてのシェルで実行されるコマンドが含まれます。 ENV変数をいくつかのファイルに設定するには、ホームディレクトリの.profileに次の行を置きます

ENV = $ HOME / .shinit; 輸出ENV

あなたが望む任意のファイル名を `` .shinit ''に置き換えます。 ENVファイルは、シェルスクリプトや非対話シェルを含むシェルの呼び出しごとに読み込まれるため、次のパラダイムはENVファイルのコマンドを対話的な呼び出しに制限するのに便利です。 以下の `` case ''と `` esac ''の中にコマンドを置きます(これらのコマンドについては後述します)。

case $ - in * i *)

#対話的な使用のための# コマンド

...

エッサック

オプション以外のコマンドライン引数が指定されている場合、シェルは最初の引数をコマンドの読み込み元のファイル名(シェルスクリプト)として扱い、残りの引数はシェルの位置パラメータとして設定します($ 1 、$ 2など)。 それ以外の場合、シェルは標準入力からコマンドを読み取ります。

引数リスト処理

すべての単一文字オプションには対応する名前があり、これを-oオプションの引数として使用できます。 set- oの名前は、以下の説明の1文字オプションの隣に表示されます。 ダッシュを指定する `` - ''はオプションをオンにし、プラス `` + ''を使うとオプションを無効にします。 次のオプションは、コマンドラインまたはset(1)組み込みコマンド(後述)で設定できます。

-a allexport

に割り当てられたすべての変数をエクスポートします。 (4.4αのためのUNIMPLEMENTED)

-c

コマンドラインからコマンドを読み込みます。 コマンドは標準入力から読み取られません。

-Cnoclobber

既存のファイルを ``> ''で上書きしないでください(4.4alphaではUNIMPLEMENTED)

-e errexit

対話型でない場合は、テストされていないコマンドが失敗した場合は直ちに終了します。 コマンドの終了ステータスは、 if elifを制御するためにコマンドが使用されている間、またはuntilまたはuntilが `` && ''または `|| ''演算子の左辺オペランドである場合に明示的にテストされたものとみなされます。

-f noglob

パス名の展開を無効にします。

-n noexec

インタラクティブでない場合は、コマンドを読み込みますが、実行しないでください。 これは、シェルスクリプトの構文をチェックするのに便利です。

-u 名詞セット

設定されていない変数を展開しようとすると標準エラーにメッセージを書き、シェルが対話型でない場合はすぐに終了します。 (4.4αのためのUNIMPLEMENTED)

-v 冗長

シェルは、読み取ったときにその入力を標準エラーに書き込みます。 デバッグに便利です。

-x xtrace

各コマンドを標準エラーに書き込みます (実行前に `+ 'が付いています。デバッグに便利です)。

-q quietprofile

-vまたは-xオプションが設定されている場合は、初期化ファイルの読み込み時に/ etc / profile .profileおよび環境変数ENVで指定されたファイルを適用しないでください。

-I ignoreeof

インタラクティブなときに入力からEOFを無視する。

-i インタラクティブ

シェルが対話的に動作するようにします。

-m モニター

ジョブ制御をオンにします(対話型の場合は自動的に設定されます)。

-s stdin

標準入力からコマンドを読み込みます(ファイル引数がない場合は自動的に設定されます)。 このオプションは、シェルがすでに実行を開始した後(set(1)を使用して)に設定しても効果がありません。

-V vi

ビルトインのvi(1)コマンドラインエディタを有効にします( Eが設定されている場合は無効にします)。

-E emacs

ビルトインのemacs(1)コマンドラインエディタを有効にします(設定されている場合は-Vを無効にします)。

-b 通知する

バックグラウンドジョブの完了の非同期通知を有効にします。 (4.4αのためのUNIMPLEMENTED)

レキシカル構造

シェルはファイルからの行の入力を読み込み、空白(空白とタブ)の単語と、 ``演算子 ''と呼ばれるシェルに特有の文字列に分割します。演算子には2種類あります。制御演算子とリダイレクション演算子(その意味は後述します)。 以下は演算子のリストです:

"制御演算子:"

&&&(); ;; | || <改行>

"リダイレクト演算子:"

<>> | << >> <&>&<< - <>

引用

クォートは、演算子、空白、キーワードなどの特定の文字や単語のシェルへの特殊な意味を削除するために使用されます。 クォーテーションには、一重引用符、二重引用符、バックスラッシュの3種類があります。

バックスラッシュ

バックスラッシュは、Aq改行を除いて、次の文字の文字どおりの意味を保持します。 Aq改行に先行するバックスラッシュは改行として扱われます。

シングルクォート

文字を一重引用符で囲むと、すべての文字のリテラル意味が保持されます(一重引用符を除くと、一重引用符を一重引用符で囲むことは不可能です)。

二重引用符

二重引用符で囲まれた文字は、ドル記号($)、バッククォート( `)、バックスラッシュ(\)を除くすべての文字のリテラル意味を保持します。二重引用符で囲まれたバックスラッシュは歴史的に奇妙で、

$ `\

それ以外の場合はリテラルのままです。

予約語

予約語とは、シェルにとって特別な意味を持つ語で、行頭および制御演算子の後に認識されます。 以下は予約語です:

Ta elif Ta fiの間にTaの場合

そうでなければTaをTaとし、Ta {Ta}

TaはTa esacまでTaをTaまで行う

それらの意味については後述する。

エイリアス

エイリアスは、 alias (1)組み込みコマンドを使用して設定される名前と対応する値です。 予約語が出現すると(上記を参照)、予約語をチェックした後、シェルはその語を検査してエイリアスと一致するかどうかを調べます。 存在する場合は、入力ストリームの値をその値に置き換えます。 たとえば、値 `` ls -F ''を持つ `` lf ''というエイリアスがある場合、次のように入力します。

lf foobar

になる

ls -F foobar

エイリアスは、素朴なユーザーが引数付き関数を作成する方法を習得することなく、コマンドの簡略化を作成するための便利な方法を提供します。 これらは、語彙的に不明瞭なコードを作成するためにも使用できます。 この使用はお勧めしません。

コマンド

シェルは言語に応じて読む単語を解釈します。その仕様はこのマニュアルページの範囲外です( POSIX 1003.2ドキュメントのBNFを参照してください)。 本質的には、行が読み込まれ、行の最初の単語(または制御演算子の後ろ)が予約語でない場合、シェルは単純なコマンドを認識しています。 それ以外の場合は、複雑なコマンドやその他の特殊な構成が認識されている可能性があります。

簡単なコマンド

単純なコマンドが認識された場合、シェルは次のアクションを実行します。

  1. `` name = value ''の形式の先頭の単語は取り除かれ、単純なコマンドの環境に割り当てられます。 リダイレクション演算子とその引数(後述)は取り除かれ、処理のために保存されます。
  2. 残りの単語は `` Expansions ''の項で説明したように展開され、残りの最初の単語はコマンド名とみなされ、コマンドが配置されます。 残りの単語はコマンドの引数とみなされます。 コマンド名がなければ、項目1で認識された `` name = value ''変数の代入は現在のシェルに影響します。
  3. リダイレクトは、次のセクションで説明するように実行されます。

リダイレクト

リダイレクションは、コマンドが入力を読み取る場所や出力を送信する場所を変更するために使用されます。 一般に、リダイレクトは、ファイルへの既存の参照をオープン、クローズ、または複製します。 リダイレクトに使用される全体的な形式は次のとおりです。

[n] redir-opファイル

redir-opは前述のリダイレクション演算子の1つです。 次に、可能なリダイレクトのリストを示します。 Bq nは `3 'のように任意の数です(ファイル記述子を参照する` Bq 3'ではなく)。

[n]>ファイル

標準出力(またはn)をファイルにリダイレクトします。

[n]> | ファイル

同じですが、 -Cオプションを無効にします。

[n] >>ファイル

標準出力(またはn)をファイルに追加します。

[n] <ファイル

ファイルから標準入力(またはn)をリダイレクトします。

[n1] <&n2

ファイル記述子n2からの標準入力(またはn1)を複製します。

[n] <& -

標準入力(またはn)を閉じます。

[n1]>&n2

n2からの標準出力(またはn1)が重複しています。

[n]>& -

標準出力(またはn)を閉じます。

[n] <>ファイル

標準入力(またはn)で読み書きするファイルを開きます。

次のリダイレクションはしばしば `` here-document ''と呼ばれます

[n] <<区切り文字

here-doc-text ...

デリミタ

区切り文字までの連続した行のすべてのテキストは保存され、標準入力のコマンド、または指定されている場合はファイル記述子nで使用可能になります。 最初の行で指定された区切り文字が引用符で囲まれている場合、here-doc-textは文字通りに扱われます。そうでなければ、テキストはパラメータ展開、コマンド置換、算術展開( ``拡張) '演算子が `` << "の代わりに` `<< - ' 'の場合、here-doc-textの先頭のタブは削除されます。

検索と実行

コマンドには、シェル関数、組み込みコマンド、および通常のプログラムの3種類があり、コマンドはその順番で(名前で)検索されます。 それらはそれぞれ異なる方法で実行されます。

シェル関数が実行されると、シェル関数の引数にシェル位置パラメータ($ 0以外は変更されない)がすべて設定されます。 コマンドの環境に明示的に配置された変数(関数名の前に代入を代入することによって)は、関数に対してローカルに行われ、与えられた値に設定されます。 関数定義で与えられたコマンドが実行されます。 コマンドが完了すると、位置パラメーターは元の値に復元されます。 これはすべて現在のシェル内で行われます。

シェルの組み込み関数は、新しいプロセスを生成することなくシェルの内部で実行されます。

それ以外の場合、コマンド名が関数または組み込み関数と一致しない場合、コマンドはファイルシステム内の通常のプログラムとして検索されます(次のセクションで説明します)。 通常のプログラムが実行されると、シェルはプログラムを実行し、引数と環境をプログラムに渡します。 プログラムが通常の実行可能ファイルでない場合(すなわちASCII表現が "#!"である "マジックナンバー"で始まらない場合、execve(2)はEr ENOEXECを返します)、シェルはプログラムをサブシェル。 この場合、子シェルはそれ自体を再初期化するので、親シェル内にあるハッシュされたコマンドの位置は、親シェル内に保存されていることを除いて、新しいシェルが呼び出されたかのようになります。子。

このドキュメントの以前のバージョンとソースコード自体は、誤って散発的に「シェルプロシージャ」としてのマジックナンバーのないシェルスクリプトを参照していることに注意してください。

パス検索

コマンドを見つけるとき、シェルは最初にその名前のシェル関数があるかどうかを調べます。 次に、その名前で組み込みコマンドを探します。 組み込みコマンドが見つからない場合、次の2つのうちの1つが発生します。

  1. スラッシュを含むコマンド名は、検索を実行せずに単に実行されます。
  2. シェルは、 PATH内の各エントリを順に検索してコマンドを探します。 PATH変数の値は、コロンで区切られた一連のエントリでなければなりません。 各エントリはディレクトリ名で構成されています。 現在のディレクトリは、空のディレクトリ名によって暗黙的に、または明示的に単一のピリオドで示されます。

コマンド終了ステータス

各コマンドには、他のシェルコマンドの動作に影響を与える可能性のある終了ステータスがあります。 このパラダイムは、コマンドが正常または成功の場合にはゼロで終了し、失敗、エラー、または誤った指示の場合にはゼロでないことです。 各コマンドのマニュアルページには、さまざまな終了コードとその意味を示す必要があります。 さらに、組み込みコマンドは、実行されたシェル関数と同様に、終了コードを返します。

複雑なコマンド

複雑なコマンドは、単純なコマンドと制御演算子または予約語の組み合わせで、より複雑なコマンドを作成します。 より一般的には、コマンドは次のいずれかです。

特に指定のない限り、コマンドの終了ステータスは、コマンドによって最後に実行された単純コマンドの終了ステータスです。

パイプライン

パイプラインは、制御演算子|で区切られた1つ以上のコマンドのシーケンスです。 最後のコマンド以外のすべての標準出力は、次のコマンドの標準入力に接続されます。 最後のコマンドの標準出力は、通常どおりシェルから継承されます。

パイプラインの形式は次のとおりです。

[!] command1 [|] command2 ...]

command1の標準出力はcommand2の標準入力に接続されています。 コマンドの標準入力、標準出力、または両方は、コマンドの一部であるリダイレクション演算子によって指定されたリダイレクトの前に、パイプラインによって割り当てられるとみなされます。

パイプラインがバックグラウンドにない場合(後述)、シェルはすべてのコマンドが完了するのを待ちます。

予約語の場合! がパイプラインの前にない場合、終了ステータスはパイプラインで指定された最後のコマンドの終了ステータスです。 それ以外の場合、終了ステータスは、最後のコマンドの終了ステータスの論理NOTです。 つまり、最後のコマンドが0を返した場合、終了ステータスは1です。 最後のコマンドが0より大きい値を返した場合、終了ステータスはゼロです。

標準入力または標準出力または両方のパイプライン割り当てはリダイレクトの前に行われるため、リダイレクトによって変更できます。 例えば:

$ command1 2>&1 | command2

command1の標準出力と標準エラーの両方をcommand2の標準入力に送ります。

A; またはターミネータを使用すると、先行するAND-ORリスト(次で説明する)が順番に実行されます。 a&は、先行するAND-ORリストの非同期実行を引き起こします。

他のいくつかのシェルとは異なり、パイプライン内の各プロセスは起動シェルの子であることに注意してください(シェル組み込みでない場合、現在のシェルで実行されますが、環境に及ぼす影響はすべて消去されます)。

バックグラウンドコマンド -

コマンドが制御演算子のアンパサンド(&)で終了した場合、シェルはコマンドを非同期に実行します。つまり、シェルは次のコマンドを実行する前にコマンドが終了するのを待機しません。

バックグラウンドでコマンドを実行するためのフォーマットは次のとおりです。

command1&[command2&...]

シェルが対話型でない場合、非同期コマンドの標準入力は/ dev / nullに設定されます

リスト - 一般的に話す

リストは、改行、セミコロン、またはアンパサンドで区切られた0個以上のコマンドのシーケンスで、オプションでこれらの3文字のいずれかで終了します。 リスト内のコマンドは、書き込まれた順に実行されます。 commandの後にアンパサンドが続く場合、シェルはコマンドを開始してすぐに次のコマンドに進みます。 それ以外の場合は、コマンドが終了してから次のコマンドに進むのを待ちます。

短絡リスト演算子

`` && ''と `` || ''はAND-ORリスト演算子です。 `` && ''は最初のコマンドを実行し、最初のコマンドの終了ステータスが0の場合は2番目のコマンドを実行します。 `` || ''も似ていますが、最初のコマンドの終了ステータスが0以外の場合は、2番目のコマンドを実行します。 `` && ''と `` || ''はどちらも同じ優先順位を持ちます。

フロー制御構成 - if、while、for、case

ifコマンドの構文は次のとおりです。

リストの場合
リスト
[elifリスト
リスト]] ...
[elseリスト]
fi

whileコマンドの構文は次のとおりです。

リスト中
リストを行う
完了

2つのリストは繰り返し実行され、最初のリストの終了ステータスはゼロです。 untilコマンドは似ていますが、whileの代わりにuntilという語があり、最初のリストの終了ステータスがゼロになるまで繰り返されます。

forコマンドの構文は次のとおりです。

単語の変数のために...
リストを行う
完了

単語が展開され、次に変数が各単語に順番に設定されて繰り返し実行されます。 doとdoneは `` {''と ``} ''に置き換えることができます

breakとcontinueコマンドの構文は次のとおりです。

ブレーク[num]
続ける[num]

ブレークはnum内側のforループまたはwhileループを終了します。 継続は、最も内側のループの次の反復に続きます。 これらは組み込みコマンドとして実装されています。

caseコマンドの構文は次のとおりです。

大文字の単語
パターン)リスト;
...
エッサック

パターンは、実際には1つ以上のパターン(後述のシェルパターンを参照)で、 `` ''文字で区切って指定することができます。

コマンドのグループ化

コマンドは、

(リスト)

または

{リスト;

これらのうちの最初のコマンドは、サブシェルでコマンドを実行します。 組み込みコマンドは(リスト)にグループ化されても、現在のシェルには影響しません。 2番目の形式は別のシェルをフォークしないので、やや効率的です。 このようにコマンドをグループ化すると、1つのプログラムであるかのように出力をリダイレクトできます。

{こんにちは; printf world \ n ";}>挨拶

機能

関数定義の構文は次のとおりです。

name()コマンド

関数定義は実行可能な文です。 それが実行されると、nameという名前の関数がインストールされ、ゼロの終了ステータスが返されます。 コマンドは通常、 `` {''と ``} ''の間に囲まれたリストです

変数は、ローカルコマンドを使用して、関数に対してローカルに宣言することができます。 これは関数の最初の文として現れ、構文は次のようになります。

ローカル[変数| - ] ...

ローカルは組み込みコマンドとして実装されています。

変数をローカルにすると、初期値を継承し、エクスポートされたフラグと読み込み専用のフラグを周囲のスコープに同じ名前の変数から継承します(存在する場合)。 それ以外の場合、変数は初期設定されていません。 シェルは動的スコープを使用するので、変数xを関数fに対してローカルにして関数gを呼び出すと、関数gを呼び出す変数xへの参照は、xという名前のグローバル変数ではなく、f内で宣言された変数xを参照します。 。

ローカルにすることができる特別なパラメータは、 `` - ''に `` - ''を指定するだけです。関数内のsetコマンドで変更されたシェルオプションは、関数が復帰したときに元の値に復元されます。

returnコマンドの構文は次のとおりです。

return [exitstatus

現在実行中の関数を終了します。 戻り値は組み込みコマンドとして実装されます。

変数とパラメータ

シェルは一連のパラメータを保持します。 名前で示されるパラメータは変数と呼ばれます。 起動時に、シェルはすべての環境変数をシェル変数に変換します。 新しい変数はフォームを使用して設定できます

名前=値

ユーザーが設定した変数は、アルファベット、数字、およびアンダースコアのみからなる名前を持たなければなりません。最初のものは数字であってはなりません。 パラメータは、以下で説明するように、数字または特殊文字で表すこともできます。

位置パラメータ

位置パラメータは、数値(n> 0)で表されるパラメータです。 シェルは、これらを最初にシェルスクリプトの名前に続くコマンドライン引数の値に設定します。 set (1)組み込み関数を使用して、それらを設定またはリセットすることもできます。

特別なパラメータ

特別なパラメータは、以下の特殊文字のいずれかで示されるパラメータです。 パラメータの値は文字の隣に表示されます。

*

1から始まる定位置パラメーターに展開します。 二重引用符で囲んだ文字列内で展開されると、各パラメータの値がIFS変数の最初の文字で区切られた1つのフィールドに展開されます .IFSが設定されていない場合はによって展開されます。

@

1から始まる定位置パラメーターに展開します。 展開が二重引用符内で行われると、各位置指定パラメータは別の引数として展開されます。 位置パラメータがない場合、@を展開すると、@が二重引用符で囲まれていても、ゼロ引数が生成されます。 例えば、$ 1が `` abc ''で$ 2が `` def ghi ''ならばQq $ @は二つの引数に展開されます:

abc def ghi

位置パラメータの数に拡張されます。

最新のパイプラインの終了ステータスに展開されます。

- (ハイフン)

現在のオプションフラグ(文字列に連結された1文字のオプション名)を、呼び出し時、組み込み組み込みコマンド、またはシェルによって暗黙的に指定されたものに展開します。

$

呼び出されたシェルのプロセスIDに展開されます。 サブシェルは、親と同じ$の値を保持します。

現在のシェルから実行された最新のバックグラウンドコマンドのプロセスIDに展開されます。 パイプラインの場合、プロセスIDはパイプラインの最後のコマンドのIDです。

0(ゼロ。)

シェルスクリプトまたはシェルスクリプトの名前に展開されます。

単語の展開

この節では、単語に対して実行されるさまざまな拡張について説明します。 後で説明するように、すべての単語に対してすべての展開が実行されるわけではありません。

単一の単語内で発生するチルドの展開、パラメータの展開、コマンド置換、算術展開、見積もりの​​削除は、単一のフィールドに展開されます。 単一の単語から複数のフィールドを作成できるのは、フィールド分割またはパス名展開のみです。 このルールの例外は、上で説明したように、二重引用符で囲まれた特殊パラメータ@を展開することです。

単語の展開順序は次のとおりです。

  1. ティルド拡張、パラメータ拡張、コマンド置換、算術拡張(これらはすべて同時に発生します)。
  2. フィールド分割は、 IFS変数がNULLでない限り、ステップ(1)で生成されたフィールドに対して実行されます。
  3. パス名展開(set -fが有効でない限り)
  4. 見積りの削除。

$文字は、パラメータ展開、コマンド置換、または算術評価を導入するために使用されます。

チルド拡張(ユーザーのホームディレクトリを置き換える)

引用符で囲まれていないチルダ文字(〜)で始まる単語は、チルダ展開されます。 スラッシュ(/)または単語の末尾までのすべての文字はユーザー名として扱われ、ユーザーのホームディレクトリに置き換えられます。 ユーザ名が見つからない場合(〜/ foobarのように)チルダはHOME変数(現在のユーザのホームディレクトリ)の値に置き換えられます。

パラメータの拡張

パラメータ展開の形式は次のとおりです。

expressionは、バックスラッシュまたは引用符で囲まれた文字列にエスケープされた文字 ``} ''と `` ''が組み合わされ、算術拡張、コマンド置換、および変数拡張の文字は、すべての文字で構成されます。 ``} ''にマッチする

パラメータ拡張の最も簡単な形式は次のとおりです。

もしあれば、パラメータの値が代入されます。

パラメータ名またはシンボルは、複数の桁の位置パラメータを指定する場合、またはパラメータの後に名前の一部として解釈できる文字が続く場合を除き、省略可能な中括弧で囲むことができます。 二重引用符で囲まれたパラメータの拡張の場合:

  1. 展開結果に対してパス名展開は実行されません。
  2. フィールド分割は、@を除いて、展開の結果に対しては実行されません。

さらに、次のいずれかの形式を使用してパラメータ拡張を変更できます。

デフォルト値を使用します。 パラメータが設定されていないか、またはnullの場合、単語の展開が置換されます。 それ以外の場合は、parameterの値が代入されます。

デフォルト値を割り当てます。 parameterが設定されていないかnullの場合、wordの展開はパラメータに代入されます。 すべての場合において、パラメータの最終的な値が代入されます。 この方法では、位置パラメータまたは特殊パラメータではなく、変数のみを割り当てることができます。

nullまたはUnsetの場合はエラーを示します。 パラメータが設定されていないか、またはnullの場合、単語の拡張子(または単語が省略されている場合はそれが設定されていないことを示すメッセージ)が標準エラーに書き込まれ、シェルは非ゼロの終了ステータスで終了します。 それ以外の場合は、parameterの値が代入されます。 対話シェルは終了する必要はありません。

代替値を使用する。 パラメータが設定されていないか、またはnullの場合、nullが代入されます。 それ以外の場合は、単語の拡張が置換されます。

前述のパラメータ展開では、フォーマットでコロンを使用すると、設定されていないパラメータまたはnullのテストが行​​われます。 コロンを省略すると、設定されていないパラメータだけがテストされます。

文字列の長さ。 パラメータの値の文字数の長さ。

部分文字列の処理には、次の4種類のパラメータ拡張があります。 いずれの場合も、正規表現表記ではなく、パターンマッチング表記(「シェルパターン」を参照)を使用してパターンを評価します。 パラメータが*または@の場合、拡張の結果は指定されていません。 完全なパラメータ展開文字列を二重引用符で囲むことによって、次の4種類のパターン文字は引用符で囲まれませんが、中括弧内の文字は引用符で囲まれます。

最小のサフィックスパターンを削除します。 単語はパターンを生成するために展開されます。 パラメータ拡張により、パターンが一致するサフィックスの最小部分が削除されたパラメータが生成されます。

最大の接尾辞パターンを削除する。 単語はパターンを生成するために展開されます。 パラメータの展開によりパラメータが生成され、パターンによってマッチしたサフィックスの最大部分が削除されます。

最小の接頭辞パターンを削除します。 単語はパターンを生成するために展開されます。 次に、パラメータを展開すると、パターンが削除されたプレフィックスの最小部分が削除されたパラメータが返されます。

最大のプレフィックスパターンを削除する。 単語はパターンを生成するために展開されます。 次に、パラメータを展開すると、パターンが削除されたプレフィックスの最大部分が削除されたパラメータが返されます。

コマンド置換

コマンド置換は、コマンド名自体の代わりにコマンド出力を置換することを可能にする。 コマンド置換は、コマンドが次のように囲まれている場合に発生します。

$(コマンド)

またはポー `バッククォートされた 'バージョンPc:

`コマンド`

シェルは、サブシェル環境でコマンドを実行し、コマンド置換をコマンドの標準出力に置き換え、置換の最後に1つ以上ののシーケンスを削除することによって、コマンド置換を拡張します。 (出力の終わりになる前に埋め込まれた<改行>は削除されませんが、フィールドの分割中は、 IFSの値と引用が有効なので、に変換されます)。

算術拡張

算術展開は、算術式を評価し、その値を代入するためのメカニズムを提供します。 算術展開の形式は次のとおりです。

$((式))

式は二重引用符で囲まれているかのように扱われますが、式の中の二重引用符は特別に扱われません。 シェルは、パラメータ拡張、コマンド置換、および見積もり解除の式のすべてのトークンを展開します。

次に、シェルはこれを算術式として扱い、式の値を代入します。

空白分割(フィールド分割)

パラメータ拡張、コマンド置換、および算術拡張の後、シェルはフィールド分割のために二重引用符で囲まれなかった拡張および置換の結果をスキャンし、複数のフィールドが得られます。

シェルは、 IFSの各文字を区切り文字として扱い、区切り文字を使用してパラメータ展開とコマンド置換の結果をフィールドに分割します。

パス名拡張(ファイル名の生成)

-fフラグがセットされていない限り、単語分割が完了した後にファイル名の生成が行われます。 各単語はスラッシュで区切られた一連のパターンとして表示されます。 拡張のプロセスは、指定されたパターンに一致する文字列で各パターンを置き換えることによって名前を形成できる既存のすべてのファイルの名前で単語を置き換えます。 これには2つの制限があります。最初に、パターンはスラッシュを含む文字列と一致することができません。また、パターンの最初の文字がピリオドでない限り、パターンはピリオドで始まる文字列と一致できません。 次のセクションでは、Pathname Expansionとcase(1)コマンドの両方で使用されるパターンについて説明します。

シェルパターン

パターンは、それ自身と一致する通常の文字とメタキャラクタで構成されます。 メタ文字は ``! '' `` * '`` `?' 'と` `[' 'これらの文字は引用符で囲まれていると特別な意味を失います。 コマンドまたは変数の置換が実行され、ドル記号または二重引用符が二重引用符で囲まれていない場合、変数の値またはコマンドの出力がこれらの文字に対してスキャンされ、メタ文字に変換されます。

アスタリスク( `` * '')は任意の文字列にマッチします。 疑問符は任意の1文字に一致します。 左括弧( `` ['')は文字クラスを導入します。 文字クラスの最後は ``] ''で示され、 `` '' 'が見つからない場合、 `` [' 'は文字クラスを導入するのではなく `` [' 'にマッチします。 文字クラスは、角かっこの間の任意の文字に一致します。 文字の範囲は、マイナス記号を使用して指定できます。 文字クラスは、感嘆符を文字クラスの最初の文字にすることによって補完することができる。

文字クラスに `` '' 'を含めるには、最初の文字を ``!' 'の後ろに記述します。 マイナス記号を含めるには、最初または最後の文字にします

ビルトイン

このセクションでは、別々のプロセスで実行できない操作を実行する必要があるため、組み込みコマンドをリストしています。 これらに加えて、効率のために組み込むことができるいくつかの他のコマンドがあります(例えば、 echo 1)。

0(真)終了値を返すヌルコマンド。

ファイル

指定されたファイル内のコマンドは、シェルによって読み込まれて実行されます。

エイリアス [ 名前 [ =文字列... ]]

name = stringが指定されている場合、シェルは値の文字列でエイリアスを定義します。nameだけを指定すると、エイリアス名の値が出力されます。 引数を指定しなければ、 エイリアス組み込み関数は定義されているすべてのエイリアスの名前と値を出力します( unaliasを参照

bg [ 仕事] ...

バックグラウンドで指定されたジョブ(またはジョブが与えられていない場合は現在のジョブ)を続行します。

コマンド コマンド引数...

指定した組み込みコマンドを実行します。 (組み込みコマンドと同じ名前のシェル関数がある場合に便利です)。

cd [ ディレクトリ ]

指定されたディレクトリ(デフォルト$ HOME)に切り替えます。cdコマンドの環境にCDPATHのエントリが表示された場合、またはシェル変数CDPATHが設定され、ディレクトリ名がスラッシュで始まらない場合は、 CDPATHにリストされているディレクトリが検索されます指定されたディレクトリの CDPATHの形式はPATHの形式と同じです。対話型シェルでは、 cdコマンドは、ユーザーが指定した名前と異なる場合、実際に切り替えたディレクトリの名前を表示します。 これらは、 CDPATHメカニズムが使用されたか、シンボリックリンクが交差したために異なる可能性があります。

eval 文字列...

すべての引数をスペースで連結します。 次に、コマンドを再解析して実行します。

exec [ command arg ... ]

コマンドが省略されない限り、シェルプロセスは指定されたプログラム(シェル組み込み関数または関数ではなく、実際のプログラムでなければなりません)に置き換えられます。 execコマンドのリダイレクトは、永続的なものとしてマークされ、 execコマンドが終了すると元に戻されません。

exit [ exitstatus ]

シェルプロセスを終了します。 exitstatusが指定されている場合は、シェルの終了ステータスとして使用されます。 それ以外の場合は、直前のコマンドの終了ステータスが使用されます。

エクスポート 名...

エクスポート-p

指定された名前は、後続のコマンドの環境に表示されるようにエクスポートされます。 変数のエクスポートを解除する唯一の方法は、変数を設定解除することです。 シェルは変数の値が書かれたときに同時にセットされるようにします

エクスポート名=値

引数を指定しないと、exportコマンドはすべてのエクスポートされた変数の名前をリストします。 -pオプションを指定すると、出力は非対話的な使用のために適切にフォーマットされます。

fc [ - e エディタ ] [ first [ last ]]

fc -l [ - nr ] [ first [ last ]]

fc -s [ old = new ] [ first ]

fc組み込みコマンドは、以前に対話シェルに入力されたコマンドをリスト表示、編集、再実行します。

-e editor

editorで指定されたエディタを使用して、コマンドを編集します。 エディタ文字列はコマンド名で、 PATH変数で検索することができます。 -eが指定されていない場合は、 FCEDIT変数の値がデフォルトとして使用されます。 FCEDITがNULLまたは未設定の場合、 EDITOR変数の値が使用されます。 EDITORがnullまたは設定されていない場合、ed(1)がエディタとして使用されます。

-l(ell)

コマンドをエディタを呼び出すのではなく、一覧表示します。 コマンドは、最初のオペランドと最後のオペランドで指定された順序で記述され、各コマンドの前にコマンド番号が付いた-rの影響を受けます。

-n

-lで表示するときにコマンド番号を表示しないようにします。

-r

リストされているコマンドの順序を逆にする( -lで編集する( -l-sのどちらでもない

-s

エディタを起動せずにコマンドを再実行してください。

最初

最終

一覧表示または編集するコマンドを選択します。 アクセス可能な以前のコマンドの数は、 HISTSIZE変数の値によって決まります 。 firstまたはlastの値は、次のいずれかです。

[+]番号

コマンド番号を表す正の数。 コマンド番号を-lオプションで表示することができます。

-数

以前に実行されたコマンドの数を実行したコマンドを表す負の10進数。 たとえば、-1は直前のコマンドです。

文字列

その文字列で始まる最も新しいコマンドを示す文字列。 old = newオペランドが-sで指定されていない場合、最初のオペランドの文字列形式には等号が埋め込まれていません。

以下の環境変数はfcの実行に影響します。

FCEDIT

使用するエディタの名前。

虚偽

アクセス可能な以前のコマンドの数。

fg [ 仕事 ]

指定したジョブまたは現在のジョブをフォアグラウンドに移動します。

getopts optstring var

POSIX getoptsコマンド。Bell Labs由来のgetopt(1)と混同しないでください。

最初の引数は一連の文字でなければなりません。各文字の後にはオプションで引数が必要であることを示すコロンが続きます。 指定された変数は、解析されたオプションに設定されます。

getoptsコマンドは、空白を含む引数の処理のために、古いgetopt(1)ユーティリティを非推奨にします。

getopts組み込み関数を使用して、パラメータのリストからオプションとその引数を取得できます。 呼び出されると、 getoptsはオプション文字列の次のオプションの値をvarで指定されたシェル変数のリストの中に置き 、シェル変数のインデックスをOPTINDに入れます。シェルが呼び出されると、 OPTINDは1に初期化されます。引き数を指定すると、 組み込み関数getoptsはシェル変数OPTARGに置きます。 オプトストリングでオプションが許可されていない場合、 OPTARGは設定解除されます。

optstringは認識されたオプション文字列です。 文字の後にコロンが続く場合、オプションには空白で区切られていてもいなくてもよい引数が必要です。 オプション文字が期待通りに見つからない場合、 getoptsは変数varを ``? ''に設定します。getoptsはOPTARGを設定解除し、出力を標準エラーに書き込みます。 optstringの最初の文字としてコロンを指定すると、すべてのエラーは無視されます。

最後のオプションに達すると、0以外の値が返されます。 残りの引数がない場合、 getoptsvarを特別なオプション `` - ''に設定し、そうでなければvarを ``? ''に設定します。

次のコードは、オプション[a]と[b]と引数を必要とするオプション[c]を取ることができるコマンドの引数をどのように処理するかを示しています。

一方、getopts abc:f
行う
case $ f in
| b)フラグ= $ f ;;
c)carg = $ OPTARG ;;
\?)echo $ USAGE; 出口1 ;;
エッサック
完了
`expr $ OPTIND - 1`をシフトする

このコードは、以下のいずれかを同等のものとして受け入れます。

cmd -acargファイルファイル
cmd -a -c argファイルfile
cmd -carg -aファイルファイル
cmd -a -carg - ファイルファイル

ハッシュ-rv コマンド...

シェルは、コマンドの位置を記憶するハッシュテーブルを維持します。 何も引数がなければ、 hashコマンドはこのテーブルの内容を出力します。 最後のcdコマンドから見ていないエントリは、アスタリスクでマークされています。 これらのエントリが無効である可能性があります。

引数を指定すると、 hashコマンドは指定されたコマンドをハッシュテーブルから削除し(関数でない限り)、それを探します。 -vオプションを使用すると、コマンドが検出されたときにコマンドの位置が出力されます。 -rオプションを指定すると、関数を除いてハッシュ・テーブル内のすべてのエントリが削除されます。

求職者 [ 仕事 ]

ジョブ内のプロセスのプロセスIDを出力します。 ジョブ引数を省略すると、現在のジョブが使用されます。

ジョブ

このコマンドは、現在のシェルプロセスの子プロセスであるすべてのバックグラウンドプロセスを一覧表示します。

pwd

現在のディレクトリを表示します。 組み込みコマンドは、同じ名前のプログラムと異なる場合があります。なぜなら、組み込みコマンドは、現在のディレクトリが毎回それを再計算するのではなく、記憶しているコマンドを記憶しているからです。 これはより速くなります。 しかし、現在のディレクトリの名前が変更された場合、 pwdの組み込みバージョンは引き続きディレクトリの古い名前を出力します。

[ - p プロンプト ] [ - r ] 変数を 読む ...

-pオプションが指定され、標準入力が端末である場合、プロンプトが表示されます。 標準入力から行が読み込まれます。 末尾の改行は行から削除され、行は上の単語分割のセクションで説明したように分割され、その断片は順番に変数に割り当てられます。 少なくとも1つの変数を指定する必要があります。 変数より多くの部分がある場合、残りの部分( IFS内の文字を区切った文字)が最後の変数に割り当てられます。 ピースより多くの変数がある場合、残りの変数にはヌル文字列が割り当てられます。 読み込みの組み込み関数は、入力時にEOFに遭遇しない限り成功を示します。この場合、失敗が返されます。

デフォルトでは、 -rオプションが指定されていない限り、バックスラッシュ `` \ ''はエスケープ文字として動作し、次の文字が文字通り扱われます。 バックスラッシュの後に改行がある場合、バックスラッシュと改行は削除されます。

名前を 読むだけ ...

readonly -p

指定された名前は、読み取り専用としてマークされているため、後で変更または設定解除することはできません。 シェルは変数の値が書込みのみで読まれると同時にセットされる

読み取り専用name = value

引数を指定しないと、readonlyコマンドはすべての読み取り専用変数の名前をリストします。 -pオプションを指定すると、出力は非対話的な使用のために適切にフォーマットされます。

[{ - options | +オプション| - arg ... ]

setコマンドは、3つの異なる機能を実行します。

引数なしでは、すべてのシェル変数の値がリストされます。

オプションが指定されている場合は、指定されたオプションフラグを設定するか、Sx引数リスト処理の節で説明されているようにオプションフラグをクリアします。

setコマンドの3番目の使用方法は、シェルの位置パラメーターの値を指定されたargsに設定することです。 オプションを変更せずに位置パラメータを変更するには、設定する最初の引数として `` - ''を使います。 argsが存在しない場合、setコマンドはすべての位置パラメータをクリアします( `` shift $# ''を実行するのと同じです)。

可変値

変数に値を代入します。 (一般的には、 setvarを使用するのではなく、variable = valueを記述する方が良いです 。setvarは、名前がパラメータとして渡される変数に値を割り当てる関数で使用されることを意図しています)。

シフト [ n ]

位置パラメータをn回シフトする。 シフトは、 $ 1の値を$ 2の値を$ 2の値に$ 3の値に設定するなどして、 $#の値を1だけ減らします。 nが位置パラメーターの数より大きい場合、 shiftはエラー・メッセージを出し、戻り状況2で終了します。

シェルおよびシェルから実行されたプロセスの累積ユーザーおよびシステム時間を出力します。 戻り状況は0です。

トラップ アクション 信号 ...

指定されたシグナルのいずれかが受信されると、シェルが解析してアクションを実行します。 シグナルはシグナル番号で指定します。 signal0の場合、シェルが終了するとアクションが実行されます。 actionはnullでも `` - ''でも構いません。前者は指定されたシグナルを無視し、後者はデフォルトのアクションを実行させます。 シェルがサブシェルをフォークすると、トラップされた(ただし無視されない)シグナルがデフォルトのアクションにリセットされます。 trapコマンドは、シェルへの入力時に無視されたシグナルには影響しません。

タイプ [ 名前... ]

各名前をコマンドとして解釈し、コマンド検索の解像度を表示します。 考えられる解決策は、シェルキーワード、エイリアス、 シェル組み込みコマンド、コマンド、追跡エイリアス、および見つからないものです。 エイリアスの場合、エイリアス展開が表示されます。 コマンドと追跡されたエイリアスの場合、コマンドの完全なパス名が出力されます。

ulimit [ - H -S ] [ - a -tfdscmlpn [ value ]]

プロセスのハードまたはソフトの制限について問い合わせたり設定したり、新しい制限を設定したりします。 ハードリミット(プロセスが違反することが許されていないか、それが低下した後に発生しない可能性がある)とソフトリミット(プロセスにシグナルが送られるが、必ずしも殺される必要はなく、上昇する可能性がある)の選択は、これらのフラグ:

-H

ハードリミットについて設定または問い合わせ

-S

ソフトリミットについて設定したり問い合わせたりします。 -H-Sのどちらも指定されていない場合は、ソフトリミットが表示されるか、両方のリミットが設定されます。 両方を指定すると、最後のものが勝ちます。

これらのフラグのいずれかを指定することによって、問い合わせまたは設定される制限が選択されます。

-a

現在のすべての制限を表示する

-t

CPU時間の制限を表示または設定する(秒単位)

-f

作成可能な最大ファイルの制限を表示または設定する(512バイトブロック単位)

-d

プロセスのデータセグメントサイズの制限を表示または設定する(キロバイト単位)

-s

プロセスのスタックサイズの制限を表示または設定する(キロバイト単位)

-c

生成可能な最大のコアダンプサイズの制限を表示または設定する(512バイトブロック単位)

-m

プロセスが使用可能な物理メモリの総量の制限を表示または設定する(キロバイト単位)

-l

プロセスがmlock (2)でロックできるメモリ量の上限を表示または設定する( キロバイト 単位

-p

このユーザーが一度に持つことができるプロセスの数の制限を表示または設定する

-n

プロセスが一度に開くことができるファイル数の制限を表示または設定する

これらのいずれも指定されていない場合は、表示または設定されているファイルサイズの制限です。 valueが指定されている場合、制限はその数値に設定されます。 それ以外の場合は電流制限が表示されます。

任意のプロセスの制限は、sysctl(8)ユーティリティを使用して表示または設定できます。

umask [ マスク ]

umask(umask(2)を参照)の値を、指定された8進数値に設定します。 引き数を省略すると、umask値が出力されます。

unalias [ - a ] [ name ]

nameを指定すると、シェルはそのエイリアスを削除します。 -aを指定すると、すべてのエイリアスが削除されます。

設定されていない 名前...

指定された変数と関数は設定されていません。 与えられた名前が変数と関数の両方に対応する場合、変数と関数の両方は設定されていません。

待つ [ 仕事 ]

指定されたジョブが完了するのを待って、ジョブ内の最後のプロセスの終了ステータスを返します。 引き数が省略されている場合は、すべてのジョブが完了するのを待ち、終了ステータスをゼロに戻します。

コマンドライン編集

shが端末から対話形式で使用されている場合、現在のコマンドとコマンド履歴(Sx Builtinsのfcを参照)は、viモードのコマンドライン編集を使用して編集できます。 このモードでは、vi manページで説明されているコマンドのサブセットと同様に、以下で説明するコマンドを使用します。 `set '-o viはviモードの編集を可能にし、shをvi挿入モードに置きます。 viモードを有効にすると、shは挿入モードとコマンドモードの間で切り替えることができます。 エディタはここでは完全には説明されていませんが、後のドキュメントに記載されています。 これはviと似ています.Aq ESCを入力すると、コマンドVIコマンドモードになります。 コマンドモードでAQを返すと、その行がシェルに渡されます。

重要: man コマンド%man )を使用して、特定のコンピュータでコマンドがどのように使用されているかを確認してください。