/usr/bin/dash
dash — コマンドインタープリタ (shell)
SYNOPSIS
dash [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] [command_file [argument ...]]
dash -c [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] command_string [command_name [argument ...]]
dash -s [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] [argument ...]
DESCRIPTION
dash はシステムの標準的なコマンドインタプリタである。現在の dash のバージョンは、シェルの仕様である POSIX 1003.2 および 1003.2a に準拠するよう変更されている最中である。 このバージョンは多くの機能を備えているため、Korn シェルと似ているように見える部分があるが Korn シェルのクローンではない (ksh を参照)。 POSIX で指定された機能と、いくつかの Berkeley 拡張機能だけがこのシェルに組み込まれている。 この man ページは、チュートリアルやシェルの完全な仕様書を意図したものではない。
Overview
シェルは、ファイルまたはターミナルから行を読み取り、それを解釈し、一般に他のコマンドを実行するコマンドである。 ユーザーがシステムにログインしたときに実行されるプログラムである (ただし、ユーザーは chsh コマンドで別のシェルを選択することができる)。 シェルは、フロー制御構造を持つ言語、データの保存に加えてさまざまな機能を提供するマクロ機能、および内蔵の履歴と行編集機能を実装している。 対話的な使用を助ける多くの機能が組み込まれており、対話的な使用と非対話的な使用(シェルスクリプト)の両方に解釈言語が共通であるという利点がある。 つまり、コマンドを実行中のシェルに直接入力したり、ファイルに記述して、そのファイルをシェルで直接実行することができるのである。
Invocation
args がなく、シェルの標準入力が端末に接続されていて (または -i フラグが設定されていて)、かつ -c オプションがない場合、そのシェルは対話型シェルとみなされる。 対話型シェルは一般に各コマンドの前にプロンプトを出し、プログラミングエラーやコマンドエラーの処理も (後述するように) 異なる。 初回起動時にシェルは引数 0 を検査し、それがダッシュ '-' で始まる場合、そのシェルもログインシェルとみなされる。 これは通常、ユーザーが最初にログインしたときにシステムによって自動的に行われる。 ログインシェルは、最初に /etc/profile と .profile ファイルが存在すれば、そこからコマンドを読み込む。 対話型シェルに入るときに環境変数 ENV が設定されているか、ログインシェルの .profile に設定されている場合、シェルは次に ENV で名付けられたファイルからコマンドを読み込む。 したがって、ログイン時にのみ実行されるコマンドは .profile ファイルに、対話型シェルごとに実行されるコマンドは ENV ファイルに記述する必要がある。 ENV変数に何らかのファイルを設定するには、ホームディレクトリの.profileに次のような行を記述すること。
- ENV=$HOME/.shinit; export ENV
- ".shinit "に任意のファイル名を代入。
オプション以外のコマンドライン引数が指定された場合、シェルは最初の引数をコマンドを読み込むファイル名(シェルスクリプト)として扱い、残りの引数はシェルの位置パラメータ($1、$2など)として設定される。 そうでなければ、シェルは標準入力からコマンドを読み込む。
Argument List Processing
対応する名前を持つすべての一文字のオプションは、-o オプションの引数として使用することができる。 set -o の名前は、以下の説明で一文字のオプションの横に記載されている。 ダッシュ「-」を指定するとオプションがオンになり、プラス「+」を指定するとオプションがオフになる。 以下のオプションは、コマンドラインから、またはset組み込み関数(後述)を使って設定することができる。
- -a allexport
- 割り当てられたすべての変数をエクスポートする。
- -c
- 標準入力からではなく、command_string オペランドからコマンドを読み取る。 特殊パラメータ 0 は command_name オペランドから、位置パラメータ ($1, $2, など) は残りの引数オペランドから設定される。
- -C noclobber
- 既存のファイルを">"で上書きしないこと。
- -e errexit
- 対話型でない場合、テストされていないコマンドが失敗したら直ちに終了する。 コマンドの終了状態は、コマンドが if、elif、while、until を制御するために使用されている場合、またはコマンドが "&&" や "||" 演算子の左手オペランドである場合、明示的にテストされていると見なされる。
- -f noglob
- パス名展開を無効にする。
- -n noexec
- インタラクティブでない場合、コマンドは読むが、実行はしない。 これは、シェルスクリプトの構文をチェックするのに便利である。
- -u nounset
- 設定されていない変数を展開しようとしたときに標準エラーにメッセージを書き、シェルが対話型でない場合は即座に終了する。
- -v verbose
- シェルは、入力を読み込むと標準エラーに書き込む。 デバッグに便利である。
- -x xtrace
- 各コマンドを実行する前に標準エラーに書き出す('+' が付く)。 デバッグに便利。
- -I ignoreeof
- 対話時に入力のEOFを無視する。
- -i interactive
- シェルを強制的に対話型に動作させる。
- -l
- dashをログインシェルとして起動したかのように動作させる。
- -m monitor
- ジョブ制御をオンにする(対話時に自動的に設定される)。
- -s stdin
- 標準入力からコマンドを読み込む (ファイル引数が存在しない場合は自動的に設定される)。 このオプションは、シェルがすでに実行を開始した後 (つまり set で) 設定しても、何の効果もない。
- -V vi
- 内蔵の vi コマンドラインエディタを有効にする (-E が設定されている場合は無効となる)。
- -E emacs
- 内臓のemacsコマンドラインエディタを有効にする (-Vが設定されている場合は無効となる)。
- -b notify
- バックグラウンドジョブの完了を非同期で通知するようにする。 (4.4alpha では UNIMPLEMENTED)
- -p priviliged
- uid と一致しない場合、実効 uid のリセットを試みない。これは、system(3) や popen(3) を経由した setuid root プログラムによる不正な使用を避けるために、 デフォルトでは設定されていない。
Lexical Structure
シェルはファイルから行単位で入力を読み込み、空白(ブランクやタブ)と、「演算子」と呼ばれるシェルにとって特別な文字の並びで単語を分割している。演算子には、制御演算子とリダイレクション演算子の2種類がある(意味は後述する)。 以下は、演算子の一覧:
- Control operators
- & && ( ) ; ;; | || <newline>
- Redirection operators
- < > >| << >> <& >& <<- <>
Quoting
クオートは、演算子、空白、キーワードなど、特定の文字や単語がシェルに与える特別な意味を取り除くために使用される。 クォートには、マッチド・シングルクォート、マッチド・ダブルクォート、バックスラッシュの3種類がある。
Backslash
バックスラッシュは、⟨ニューライン⟩を除いて、続く文字の文字通りの意味を保持する。 改行⟩の前のバックスラッシュは、行の継続として扱われる。
Single Quotes
シングルクオーテーションで文字を囲むと、すべての文字の文字通りの意味が保持される(シングルクオーテーションを除く、シングルクオーテーションで囲まれた文字列にはシングルクオーテーションを付けることができなくなる)。
Double Quotes
二重引用符で文字を囲むと、ドル記号($)、バッククォート(`)、バックスラッシュ( \)以外のすべての文字の文字通りの意味が保たれる。 二重引用符で囲まれたバックスラッシュは、歴史的に見ると 次の文字だけを引用するためのものである:
- $ ` " \ <newline>.
それ以外はリテラルである。
Reserved Words
予約語とは、シェルにとって特別な意味を持つ言葉で、行頭や制御演算子の後に認識される。 以下は予約語である:
! elif fi while case else for then { } do done until if esac
その意味については後述する。
Aliases
エイリアスは、alias 組み込みコマンドを使用して設定された名前と対応する値である。 予約語が発生する可能性がある場合(上記参照)、予約語をチェックした後、シェルはその語がエイリアスに一致するかどうかをチェックする。 もし一致すれば、入力ストリーム中のそれをその値で置き換える。 例えば、"ls -F" という値を持つ "lf" というエイリアスがある場合、入力は次のようになる:
lf foobar ⟨return⟩
は次のようになる。
ls -F foobar ⟨return⟩
エイリアスは、素朴なユーザーが引数を持つ関数の作成方法を学ぶことなく、コマンドのショートサンドを作成するための便利な方法を提供する。 また、字句的にわかりにくいコードを作成する。
Commands
シェルは読み取った単語を言語に従って解釈するが、その仕様はこの man ページの範囲外である (POSIX 1003.2 文書の BNF を参照すること)。 しかし、基本的には、行を読み、その行の最初の単語(または制御演算子の後)が予約語でなければ、シェルは単純なコマンドを認識する。 そうでない場合は、複雑なコマンドや他の特殊な構成が認識された可能性がある。
Simple Commands
単純なコマンドが認識された場合、シェルは以下の動作を行う:
- "name=value"の形の先頭の単語を取り除き、単純なコマンドの環境に割り当てる。 リダイレクション演算子およびその引数(後述)は削除され、処理のために保存される。
- 残りの単語は、「展開」の項で説明したように展開され、最初に残った単語をコマンド名とみなして、コマンドを配置する。 残りの単語は、コマンドの引数とみなされる。 コマンド名が得られなかった場合、項目1で認識された"name=value"変数の割り当てが現在のシェルに影響を与える。
- リダイレクションは、次のセクションで説明するように実行される。
Redirections
リダイレクションは、コマンドが入力を読み取る場所や出力を送信する場所を変更するために使用する。 一般的には、次のようになる。 リダイレクションは、ファイルへの既存の参照を開いたり閉じたり、複製したりする。 リダイレクトに使用される全体的な形式は リダイレクトに使用される全体的な形式は次のとおりである:
- [n] redir-op file
ここで、redir-opは前述のリダイレクト演算子の1つである。 以下は、可能なリダイレクションのリストである。 可能なリダイレクションのリストである。 [n]は0から9までの任意の数字で、'3'('[3]'ではない)のように、ファイルディスクリプタを参照するものである。
- [n]> file Redirect standard output (or n) to file.
- [n]>| file Same, but override the -C option.
- [n]>> file Append standard output (or n) to file.
- [n]< file Redirect standard input (or n) from file.
- [n1]<&n2 Copy file descriptor n2 as stdout (or fd n1). fd n2.
- [n]<&- Close standard input (or n).
- [n1]>&n2 Copy file descriptor n2 as stdin (or fd n1). fd n2.
- [n]>&- Close standard output (or n).
- [n]<> file Open file for reading and writing on standard input (or n).
以下のようなリダイレクトを「here-document」と呼ぶことがある。
- [n]<< delimiter
- here-doc-text ...
- delimiter
区切り文字までの連続した行のテキストはすべて保存され、標準入力、またはファイルディスクリプタnが指定されている場合は、そのコマンドで利用できるようになる。 最初の行で指定された区切り文字が引用符で囲まれている場合、here-doc-textは文字通りに扱われる。それ以外の場合は,パラメータ展開,コマンド置換,算術展開(「展開」の項を参照)が行われる.“Expansions”のセクションで説明されている)。 演算子が"<<"でなく"<<-"の場合、here-doc-textの先頭のタブは取り除かれる。
Search and Execution
コマンドには、シェル関数、組み込みコマンド、通常のプログラムの3種類があり、この順番でコマンドを(名前で)検索する。 それぞれ異なる方法で実行される。
シェル関数が実行されると、シェルの位置パラメーターはすべて(変更されない$0を除く)シェル関数の引数に設定される。 コマンドの環境に明示的に置かれた変数(関数名の前に変数への代入を置く)は、その関数のローカルとなり、与えられた値に設定される。 次に,関数定義で与えられたコマンドが実行される. コマンドの実行が完了すると、位置パラメータは元の値に戻される. これはすべて現在のシェル内で行われる。
シェルのビルトインは、新しいプロセスを生成することなく,シェルの内部で実行される。
それ以外の場合、コマンド名が関数やビルトインにマッチしない場合、コマンドはファイルシステム内の通常のプログラムとして検索される(次のセクションで説明する)。 通常のプログラムが実行されると、シェルは引数や環境をプログラムに渡して実行する。 プログラムが通常の実行可能なファイルでない場合(すなわち、ASCII表現が "#!"である「マジックナンバー」で始まらないので、execve(2)がENOEXECを返す場合)、シェルは子シェルでプログラムを解釈することになる。 この場合、子シェルはそれ自体を再初期化するので、親シェルにあるハッシュ化されたコマンドの位置が子シェルによって記憶されることを除いて、アドホックなシェルスクリプトを扱うために新しいシェルが起動されたかのような効果がある。
この文書の以前のバージョンとソースコード自体は、マジックナンバーのないシェルスクリプトを「シェルプロシージャ」と誤解を招くような散発的な表現をしていることに注意されたい。
Path Search
コマンドを探すとき、シェルはまずその名前のシェル関数があるかどうかを確認する。 そして、その名前の組み込みコマンドを探す。 組み込みコマンドが見つからない場合、2つのうちの1つが起こる:
- スラッシュを含むコマンド名は、検索を行わず単に実行される。
- シェルはPATHの各エントリを順番に検索して、コマンドを探す。 PATH変数の値は,コロンで区切られた一連のエントリであるべきである。 各エントリは,ディレクトリ名で構成される。 カレントディレクトリは,空のディレクトリ名で暗黙的に,またはピリオド1つで明示的に示すことができる。
Command Exit Status
各コマンドには、他のシェルコマンドの動作に影響を与えることができる終了ステータスがある。 パラダイムは、コマンドが正常または成功した場合はゼロで終了し、失敗、エラー、または誤った指示の場合はゼロ以外で終了することである。 各コマンドのマニュアルページには、さまざまな終了コードとその意味が記載されているはずである。 さらに、組み込みのコマンドは、実行されたシェル関数と同様に、終了コードを返す。
コマンドが完全に変数代入で構成されている場合、コマンドの終了ステータスは、もしあれば最後のコマンド代入のものであり、そうでなければ0である。
Complex Commands
複雑なコマンドは、単純なコマンドと制御演算子や予約語の組み合わせで、より大きな複雑なコマンドを作成する。 より一般的には、コマンドは次のいずれかに該当する:
• simple command
• pipeline
• list or compound-list
• compound command
• function definition
特に断りのない限り、コマンドの終了状態は、そのコマンドが最後に実行した単純なコマンドの終了状態である。
Pipelines
パイプラインは、制御演算子|で区切られた1つ以上のコマンドのシーケンスである。 最後のコマンド以外のすべての標準出力は、次のコマンドの標準入力に接続される。 最後のコマンドの標準出力は、通常通り、シェルから継承される。
パイプラインの形式は次の通りである:
[!] command1 [| command2 ...]
コマンド1の標準出力は、コマンド2の標準入力に接続される。 コマンドの標準入力、標準出力、またはその両方は、コマンドの一部であるリダイレクト演算子によって指定されたリダイレクトの前に、パイプラインによって割り当てられたと見なされる。
パイプラインがバックグラウンドにない場合(後述)、シェルはすべてのコマンドの完了を待つ。
予約語! がパイプラインの前にない場合、終了ステータスはパイプラインで指定された最後のコマンドの終了ステータスになる。 そうでない場合、終了ステータスは、最後のコマンドの終了ステータスの論理NOTとなる。 すなわち、最後のコマンドが0を返す場合、終了ステータスは1であり、最後のコマンドが0より大きい値を返す場合、終了ステータスは0である。
標準入力または標準出力、あるいはその両方のパイプラインの割り当ては、リダイレクトの前に行われるため、リダイレクトによって変更されることがある。 例えば、次のようになる:
$ command1 2>&1 | command2
は、コマンド1の標準出力と標準エラーの両方を、コマンド2の標準入力に送信する。
または⟨ニューライン⟩の終端は、先行するAND-ORリスト(次に説明)を順次実行させる;&は先行するAND-ORリストを非同期に実行する。
他のシェルとは異なり、パイプラインの各プロセスは起動したシェルの子であることに注意すること(シェルの組み込みでない場合は、現在のシェルで実行されるが、環境に与える影響はすべて消去される)。
Background Commands – &
コマンドが制御演算子アンパサンド(&)で終了する場合、シェルはコマンドを非同期で実行する、つまり、次のコマンドを実行する前にコマンドが終了するのを待たない。
バックグラウンドでコマンドを実行する場合の形式は以下の通りである:
command1 & [command2 & ...]
シェルが対話型でない場合、非同期コマンドの標準入力は/dev/nullに設定される。
Lists – Generally Speaking
リストは、0個以上のコマンドを改行、セミコロン、アンパサンドで区切り、オプションでこれら3つの文字のうち1つで終了させるシーケンスである。 リスト内のコマンドは,書かれた順番に実行される. コマンドの後にアンパサンドが続く場合,シェルはそのコマンドを開始し,すぐに次のコマンドに進む。それ以外の場合は,コマンドが終了するのを待ってから次のコマンドに進む。
Short-Circuit List Operators
"&&"と"||"はAND-ORリスト演算子である。 "&&"は、最初のコマンドを実行し、最初のコマンドの終了ステータスがゼロの場合に限り、2番目のコマンドを実行する。 "||"も同様だが、最初のコマンドの終了ステータスがゼロでない場合にのみ、2番目のコマンドを実行する。 "&&"と"||"はどちらも同じ優先度を持つ。
フロー制御構文 - if、while、for、case ifコマンドの構文は以下の通りである。
if list then list [ elif list then list ] ... [ else list ] fi
whileコマンドの構文は以下の通りである。
while list do list done
最初のリストの終了ステータスがゼロの間、2つのリストが繰り返し実行される。 untilコマンドも似ているが、whileの代わりにuntilという単語があり、最初のリストの終了ステータスがゼロになるまで繰り返される。
forコマンドの構文は以下の通りである。
for variable [ in [ word ... ] ] do list done
inに続く単語が展開され、変数に各単語が順番にセットされた状態でリストが繰り返し実行される。 in word ...を省略すると、in "$@"と同じになる。
break and continueコマンドの構文は以下の通りである。
break [ num ] continue [ num ]
Breakは、最も内側のforまたはwhileループを終了させる。 Continueは、最も内側のループの次の反復を続ける。 これらは組み込みコマンドとして実装されている。
caseコマンドの構文は以下の通りである。
case word in [(]pattern) list ;; ... esac
パターンは実際には1つ以上のパターン(後述のシェルパターンを参照)にすることができ、"|"文字で区切られる。 パターンの前の"("文字はオプションである。
コマンドをグループ化する
コマンドは
(list)
or
{ list; }
これらのうち最初のものは、サブシェル内のコマンドを実行する。 (リスト)にグループ化された組み込みコマンドは、現在のシェルに影響を与えない。 2番目の形式は、別のシェルをフォークしないので、少し効率的である。 このようにコマンドをグループ化することで、あたかも1つのプログラムであるかのように出力をリダイレクトすることができる:
{ printf " hello " ; printf " world\n" ; } > greeting
他のコマンド引数としてではなく、予約語として認識されるように、"}"は制御演算子(ここでは";")の後に続かなければならないことに注意。
関数
関数定義の構文は以下の通りである。
name () command
実行されると、nameという名前の関数がインストールされ、終了ステータスはゼロを返す。 コマンドは通常、"{"と"}"で囲まれたリストである。
変数は、localコマンドを使用することで、関数に対してlocalであることを宣言することができる。 これは関数の最初のステートメントとして記述する。
local [variable | -] ...
localは組み込みコマンドとして実装されている。
変数をlocalにすると、その変数の初期値、エクスポートとリードオンリーのフラグを、周囲のスコープに同じ名前の変数があれば、その変数から継承する。 そうでない場合、変数は初期値として設定されない。 シェルは動的スコープを使用するため、変数xを関数fのlocalにし、その関数fが関数gを呼び出した場合、gの内部で作成された変数xへの参照は、xという名前のグローバル変数ではなく、fの内部で宣言された変数xを参照することになる。
localにできる唯一の特別なパラメーターは"-"である。 localに"-"を指定すると、関数内でsetコマンドによって変更されたシェル・オプションは、関数が戻ったときに元の値に戻される。
returnコマンドの構文は以下の通りである。
return [exitstatus]
現在実行中の関数を終了させる。 returnは組み込みコマンドとして実装されている。
Variables and Parameters
シェルはパラメーターのセットを保持する。 名前で示されるパラメータは変数と呼ばれる。 起動時、シェルはすべての環境変数をシェル変数に変える。 新しい変数は
name=value
ユーザーによって設定される変数は、アルファベット、数字、アンダースコアからなる名前でなければならない。 パラメータは、以下に説明するように、数字や特殊文字で表すこともできる。
Positional Parameters
位置パラメーターは、数字(n > 0)で示されるパラメーターである。 シェルはこれらを、シェルスクリプトの名前に続くコマンドライン引数の値に初期設定する。 set 組み込み関数を使用して、これらを設定またはリセットすることもできる。
Special Parameters
特殊パラメータは、以下の特殊文字のいずれかで示されるパラメータである。 パラメータの値は、その文字の横に記載されている。
- 位置パラメータを1から順に展開する。 展開が二重引用符で囲まれた文字列の中で行われる場合、各パラメータの値が IFS変数の最初の文字で区切られた1つのフィールドに展開され、IFSが設定されていない場合は ⟨スペース⟩で区切られる。
- @
- 位置パラメータを1から順に展開する。 展開が二重引用符で囲まれている場合、各位置パラメータは別々の引数として展開される。 位置パラメーターがない場合、@が二重引用符で囲まれていても、@の展開は0個の引数を生成する。 これが基本的に意味するのは、例えば$1が "abc "で$2が "def ghi "の場合、"$@"は2つの引数に展開されるということである:
- "abc" "def ghi"
- 位置パラメーターの数に拡張する。
- ?
- 直近のパイプラインの終了ステータスに展開する。
- - (Hyphen.)
- 起動時、set 組み込みコマンド、またはシェルによって暗黙的に指定された、現在のオプションフラグ(1文字のオプション名を連結した文字列)に展開する。
- $
- 呼び出されたシェルのプロセス ID に展開される。 サブシェルは、親と同じ $ の値を保持する。
- !
- 現在のシェルから実行された最新のバックグラウンド・コマンドのプロセスIDに展開される。 パイプラインの場合、プロセスIDはパイプラインの最後のコマンドのものになる。
- 0 (Zero.)
- シェルまたはシェルスクリプトの名前に展開する。
Word Expansions
この節では、単語に対して行われる様々な展開について説明する。 後述するように、すべての展開がすべての単語に対して行われるわけではない。 後述するように、すべての単語に適用されるわけではない。
チルダ展開、パラメータ展開、コマンド置換、算術展開、引用符除去のうち、1つの単語内で行われるものは、1つのフィールドに展開される。 一つの単語から複数のフィールドを作ることができるのは、フィールドの分割かパス名の展開だけである。 このルールの唯一の例外は、上で説明したように、ダブルクォート内での特殊パラメータ@の展開である。
単語展開の順序は以下の通りである:
- チルダ展開、パラメータ展開、コマンド置換、算術展開(これらはすべて同時に行われる)。
- フィールド分割は、IFS変数がNULLでない限り、ステップ(1)で生成されたフィールドに対して行われる。
- パス名展開(set -fが有効な場合を除く)。
- 引用符の除去。
文字は、パラメータ展開、コマンド置換、または算術評価の導入に使用される。
チルダ展開(ユーザーのホームディレクトリを置換する)。 引用符で囲まれていないチルダ文字(~)で始まる単語は、チルダ展開の対象となる。 スラッシュ(/)または語尾までのすべての文字がユーザー名として扱われ、そのユーザーのホームディレクトリに置き換えられる。 ユーザー名がない場合(~/foobarのように)、チルダはHOME変数の値(現在のユーザーのホームディレクトリ)に置き換えられる。
Parameter Expansion
パラメータ展開のフォーマットは以下の通りである:
${expression}
式は、マッチする"}"までのすべての文字で構成される。 バックスラッシュでエスケープされた"}"、または引用符で囲まれた文字列内の"}"、および 埋め込み算術展開、コマンド置換、変数展開の文字は、マッチする"}"を決定する際には検査されない。
パラメータ展開の最も単純な形式は以下のとおりである:
${parameter}
パラメータの値があれば、その値が代入される。
パラメータ名または記号は中括弧で囲むことができる。中括弧は、1桁以上の位置パラメー タや、パラメータの後に名前の一部として解釈される文字が続く場合を除き、省略可能である。 パラメータ展開が二重引用符で囲まれている場合、そのパラメータは中括弧で囲むことができる:
- パス名展開は展開結果に対して行われない。
- フィールド分割は、@を除いて、展開結果に対して実行されない。
さらに、以下の書式のいずれかを使用することで、パラメータ展開を変更することができる。
- ${parameter:-word}
- デフォルト値を使用する。 パラメータが未設定またはNULLの場合、wordの展開が代入され、そうでない場合、パラメータの値が代入される。
- ${parameter:=word}
- デフォルト値を割り当てる。 パラメータが未設定または NULL の場合、単語の展開がパラメータに代入される。 すべての場合において、パラメータの最終値が代入される。 この方法で代入できるのは変数のみで、位置パラメーターや特殊パラメーターは代入できない。
- ${parameter:?[word]}
- Nullまたは未設定の場合、エラーを表示する。 パラメータが未設定またはNULLの場合、wordの展開(wordが省略された場合は未設定であることを示すメッセージ)が標準エラーに書き込まれ、シェルは0以外の終了ステータスで終了する。 そうでなければ、パラメータの値が代入される。 対話型シェルは終了する必要はない。
- ${parameter:+word}
- 代替値を使用する。 パラメータが未設定またはNULLの場合、NULLが代入され、そうでない場合、単語の展開が代入される。
- 先に示したパラメータ展開では、書式にコロンを使用すると、パラメータが未設定またはNULLであるかどうかをテストすることになる。
- ${#parameter}
- 文字列の長さ。 パラメータ値の文字数。
以下の4種類のパラメータ拡張は、部分文字列処理を提供する。 いずれの場合も、パターンの評価には正規表現表記ではなく、パターンマッチング表記(シェルパターン参照)が使われる。 パラメータが*または@の場合、展開結果は不定である。 パラメータ展開文字列全体を二重引用符で囲むと、次の4種類のパターン文字は引用符で囲まれないが、中括弧内の文字は引用符で囲まれる。
- ${parameter%word}
- 最小接尾辞パターンを取り除く。 単語を展開してパターンを生成する。 パラメータ展開の結果、パターンにマッチする接尾辞の最小部分が削除されたパラメータが得られる。
- ${parameter%%word}
- 最大の接尾辞パターンを取り除く。 単語を展開してパターンを生成する。 そして、パラメータ展開の結果、パターンにマッチする接尾辞の最大部分が削除されたパラメータが生成される。
- ${parameter#word}
- 最小の接頭辞パターンを取り除く。 単語を展開してパターンを生成する。 パラメータ展開の結果、パターンにマッチする接頭辞の最小部分が削除されたパラメータが得られる。
- ${parameter##word}
- 最大の接頭辞パターンを取り除く。 単語を展開してパターンを生成する。 パラメータ展開の結果、パターンにマッチする接頭辞の最大部分が削除されたパラメータが得られる。
Command Substitution
コマンド置換では、コマンド名の代わりにコマンドの出力を置換することができる。 コマンド置換は、コマンドが以下のように囲まれているときに行われる:
$(command)
or (“backquoted” version):
`command`
シェルは、サブシェル環境でコマンドを実行し、コマンドの標準出力でコマン ド置換を置き換えることで、コマンド置換を展開し、置換の最後にある1つ以上の ⟨改行⟩のシーケンスを削除する。 (出力の末尾の前に埋め込まれた⟩は削除されないが、フィールド分割の際に、有効なIFSとquotingの値によっては、⟨space⟩に変換されることがある)。
Arithmetic Expansion
算術展開は、算術式を評価し、その値を代入するメカニズムを提供する。 算術展開の書式は以下の通りである:
$((expression))
式は二重引用符で囲まれているかのように扱われるが、式の中の二重引用符は特別に扱われない。 シェルは、パラメータ展開、コマンド置換、引用符除去のために、式のすべてのトークンを展開する。
次に、シェルはこれを算術式として扱い、式の値を代入する。
White Space Splitting (Field Splitting)
パラメータ展開、コマンド置換、算術展開の後、シェルはフィールド分割のためにダブルクォートで発生しなかった展開と置換の結果をスキャンし、複数のフィールドが発生することがある。
シェルはIFSの各文字をデリミタとして扱い、デリミタを使ってパラメータ展開やコマンド置換の結果をフィールドに分割する。
Pathname Expansion (File Name Generation)
-fフラグが設定されていない限り、ファイル名の生成は単語の分割が完了した後に行われる。 各単語は,スラッシュで区切られた一連のパターンとみなされる。 展開の処理では,各パターンを指定されたパターンに一致する文字列に置き換えることでファイル名を形成できるすべての既存ファイルの名前に単語を置き換える. これには2つの制約がある。第1に,パターンはスラッシュを含む文字列にはマッチしないこと,第2に,パターンの最初の文字がピリオドでない限り,パターンはピリオドで始まる文字列にマッチしないことである。 次のセクションでは、Pathname Expansionとcaseコマンドの両方に使用されるパターンについて説明する。
Shell Patterns
パターンは、それ自体にマッチする通常の文字と、メタ文字で構成される。 メタ文字は、"!"、"*"、"?"、"["である。 これらの文字は,引用符で囲むと特別な意味を失う。 コマンドや変数の置換が行われ、ドル記号やバッククォートが二重引用符で囲まれていない場合、変数の値やコマンドの出力がこれらの文字をスキャンし、それらはメタ文字に変わる。
アスタリスク("*")は、任意の文字列と一致する。 クエスチョンマークは、任意の1文字にマッチする。 左括弧("[")は、文字クラスを導入する。 文字クラスの終わりは("]")で示される。"]"がない場合、"["は文字クラスを導入するのではなく、"["にマッチする。 文字クラスは,角括弧の間の任意の文字にマッチする。 マイナス記号で文字の範囲を指定することもできる。 感嘆符を文字クラスの最初の文字とすることで,文字クラスを補完することができる。
文字クラスに"]"を含めるには,(もしあれば"!"の後に)最初にリストされる文字にする。 マイナス記号を含めるには、最初か最後の文字にする。
Builtins
このセクションでは、別のプロセスでは実行できない何らかの操作を行う必要があるためにビルトインされているビルトインコマンドを列挙する。 これら以外にも、効率化のためにビルトインされるコマンドがいくつかある(例:printf, echo, test など)。
- true
- 終了値0(真)を返すヌルコマンドである。
- file
- 指定されたファイル内のコマンドをシェルが読み込んで実行する。
- alias [name[=string ...]]
- name=stringが指定された場合、シェルはエイリアス名を値文字列で定義する。 name だけが指定された場合,エイリアス名の値が表示される。 引数を指定しない場合,alias builtinは,定義されたすべてのエイリアスの名前と値を表示する(unaliasを参照)。
- bg [job] ...
- 指定されたジョブ(ジョブが指定されていない場合は現在のジョブ)をバックグラウンドで継続する。
- command [-p] [-v] [-V] command [arg ...]
- 指定されたコマンドを実行するが、そのコマンドを検索する際にシェル関数を無視する。 (これは、組み込みコマンドと同じ名前のシェル関数がある場合に便利である)。
- -p
- PATH を使ってコマンドを検索し、すべての標準ユーティリティを見つけることが保証される。
- -V
- コマンドを実行せず、コマンドを検索し、コマンド検索の解答を表示する。 これはタイプビルトインと同じである。
- -v
コマンドを実行せず、コマンドを検索し、ユーティリティの絶対パス名、ビルトインの名前,エイリアスの展開名を表示する。
- cd -
- cd [-LP] [directory]
- 指定されたディレクトリに切り替える(デフォルトはHOME)。 cdコマンドの環境にCDPATHの項目があるか,シェル変数CDPATHが設定されていて,ディレクトリ名がスラッシュで始まらない場合,CDPATHに記載されているディレクトリを検索して,指定したディレクトリに移動する。 CDPATHの形式は,PATHの形式と同じである。 引数に単一のダッシュが指定された場合、それはOLDPWDの値に置き換えられる。 cdコマンドは,実際に切り替えたディレクトリの名前が,ユーザが与えた名前と異なる場合,その名前を出力する。 これらは、CDPATH機構が使用されたためか、引数がダッシュ1つであったためか、異なる可能性がある。 Pオプションは、物理的なディレクトリ構造を使用するようにする。つまり、すべてのシンボリックリンクはそれぞれの値に解決される。 Lオプションは、先行する-Pオプションの効果を無効にする。
- echo [-n] args...
- 引数をスペースで区切って標準出力に出力する。 nオプションがない限り、引数の後に改行が出力される。
- 出力中に以下の文字列のいずれかに遭遇した場合、その文字列は出力されない。 出力中に以下の文字列に遭遇した場合、その文字列は出力されず、代わりに指定された動作が実行される:
- \b バックスペース文字が出力される。
- \c その後の出力を抑制する。 通常、最後の引数の末尾で使用し、echo が出力するはずの末尾の改行を抑止する。
- \e エスケープ文字(ESC)を出力する。
- \f フォームフィードを出力する。
- \n 改行文字を出力する。
- \r キャリッジリターンを出力する。
- \t (横)タブ文字を出力する。
- \v (縦)タブを出力する。
- \0digits
- 8進数0~3桁で与えられる値を持つ文字を出力する。 0桁の場合はnul文字が出力される。
- \0digits
- \\ バックスラッシュを出力する。
- それ以外のバックスラッシュの配列は、未定義の動作を引き起こす。
- eval string ...
- すべての引数をスペースで連結する。 その後、コマンドを再パースして実行する。
- exec [command arg ...]
- commandが省略されない限り、シェルプロセスは指定されたプログラム(これはシェルの組み込みや関数ではなく、実際のプログラムでなければならない)に置き換えられる。 execコマンドのリダイレクションは、execコマンドの終了時に元に戻らないように、永久的なものとしてマークされる。
- exit [exitstatus]
- シェルプロセスを終了させる。 exitstatusが与えられた場合は、シェルの終了ステータスとして使用され、それ以外の場合は、直前のコマンドの終了ステータスが使用される。
- export name ...
- export -p
- 指定された名前は、後続のコマンドの環境に表示されるようにエクスポートされる。 変数のエクスポートを解除する唯一の方法は、変数の設定を解除することである。 シェルでは,次のように書くことで,変数のエクスポートと同時に変数の値を設定することができる。
- export name=value
- 引数を指定しない場合、exportコマンドはエクスポートされたすべての変数名を一覧表示する。 pオプションを指定すると、出力は非対話的な使用のために適切にフォーマットされる。
- fc [-e editor] [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が使用される。
- -l (ell)
- コマンドに対してエディタを起動するのではなく、コマンドをリストアップする。 コマンドは,-rの影響を受けて,最初と最後のオペランドで示される順序で書かれ,各コマンドの前にはコマンド番号が付けられる.
- -n -lでリストアップする際に、コマンド番号を表示しないようにする。
- -r リストアップされたコマンド(-l付き)または編集されたコマンド(-lも-sもなし)の順序を逆にする。
- -s エディタを起動せずにコマンドを再実行する。
- first
- last リストアップまたは編集するコマンドを選択する。 アクセスできる前のコマンドの数は、変数HISTSIZEの値によって決定される。 firstまたはlast、あるいはその両方の値は、次のいずれかである:
- [+]number
- コマンド番号を表す正の数。コマンド番号は-lオプションで表示することができる。
- [+]number
- -number
- 何個か前に実行されたコマンドを表す負の10進数である。 例えば、-1 は直前のコマンドである。
- -number
- string
- その文字列で始まる、最も最近入力されたコマンドを示す文字列である。 old=newオペランドが-sでも指定されない場合、最初のオペランドの文字列形式は、埋め込まれた等号を含むことはできない。
- 以下の環境変数がfcの実行に影響を与える:
- FCEDIT 使用するエディターの名前。
- HISTSIZE アクセス可能な過去のコマンドの数。
- fg [job]
- 指定されたジョブまたは現在のジョブをフォアグラウンドに移動させる。
- gtopts optstring var
- POSIXのgetoptsコマンドで、ベル研由来のgetoptと混同しないように。
- 最初の引数は、一連の文字でなければならず、それぞれの文字には、オプションが引数を必要とすることを示すコロンがオプションとして続くことができる。 指定された変数は,解析されたオプションに設定される。
- getoptsコマンドは、空白を含む引数の扱いのため、古いgetoptユーティリティを非推奨とする。
- getopts 組み込み関数を使って、パラメータのリストからオプションとその引数を取得することができる。 getoptsは,起動されると,リスト中のオプション文字列から次のオプションの値をvarで指定されるシェル変数に,そのインデックスをシェル変数OPTINDに置く。 シェルが起動されると、OPTINDは1に初期化される。 引数を必要とする各オプションについて、getopts 組み込み関数がシェル変数 OPTARG に配置する。 オプションがoptstringで許可されていない場合、OPTARGはアンセットされる。
- optstring は、認識されたオプション文字列である (getopt](3) を参照)。 文字にコロンが続く場合、そのオプションは空白で区切られていてもいなくてもよい引数を持つことが期待される。 オプション文字が期待通りに見つからなかった場合、getopts は変数 var を "?" に設定する; 次に getopts は OPTARG をアンセットして標準エラーに出力を書き出す。 optstringの最初の文字にコロンを指定することで、すべてのエラーを無視することができる。
- 最後のオプションの後、getoptsは0以外の値を返し、varに"?"をセットする。
- 次のコードは、オプション[a]と[b]、および引数を必要とするオプション[c]を取ることができるコマンドの引数をどのように処理するかを示している。
while getopts abc: f
do
case $f in
a | b) flag=$f;;
c) carg=$OPTARG;;
\?) echo $USAGE; exit 1;;
esac
done
shift `expr $OPTIND - 1`
- 本コードは、以下のいずれかを等価として受け付ける:
cmd -acarg file file
cmd -a -c arg file file
cmd -carg -a file file
cmd -a -carg -- file file
- hash -rv command ...
- シェルは、コマンドの位置を記憶するハッシュテーブルを保持している。 引数なしで、hashコマンドはこのテーブルの内容をプリントアウトする。 最後にcdコマンドを実行してから一度も見ていない項目には、アスタリスクが付けられている。これらの項目が無効である可能性もある。
- 引数を指定すると、hashコマンドは指定されたコマンドをハッシュテーブルから削除し(それが関数でない限り)、次にそれらの位置を特定する。 -vオプションをつけると、ハッシュは見つけたコマンドの位置を表示する。 -rオプションをつけると、hashコマンドはハッシュテーブルの関数を除くすべてのエントリーを削除する。
- pwd [-LP]
- 内蔵コマンドは、毎回再計算するのではなく、カレントディレクトリが何であるかを記憶している。そのため、より高速に動作する。 しかし,カレントディレクトリの名前が変更された場合,pwdのビルトイン版はディレクトリの古い名前を表示しつづける. -Pオプションは、現在の作業ディレクトリの物理的な値を表示する、つまり、すべてのシンボリックリンクがそれぞれの値に解決されるようにする。 -Lオプションは,先行する-Pオプションの効果を無効にする.
- read [-p prompt] [-r] variable [...]
- -pオプションが指定され,標準入力が端末である場合は,プロンプトが表示される。 次に,標準入力から1行が読み込まれる。 行末の改行が削除され,上記の単語分割の項で説明したように行が分割され,その断片が順番に変数に代入される。 少なくとも1つの変数が指定されなければならない。 駒が変数より多い場合は、残りの駒(駒を区切ったIFSの文字とともに)が最後の変数に代入される。 ピースより変数の方が多い場合は、残りの変数にヌル文字列が代入される。 入力で EOF に遭遇しない限り、read 組み込みは成功を示し、その場合は失敗が返される。
- デフォルトでは、-rオプションが指定されない限り、バックスラッシュ"˶"はエスケープ文字として機能し、次の文字を文字通りに処理する。 バックスラッシュの後に改行がある場合、バックスラッシュと改行は削除される。
- readonly name ...
- readonly -p
- 指定された名前は読み取り専用としてマークされ、その後に変更したり設定を解除したりすることはできない。 シェルは,変数の値を,それが読み取り専用にマークされると同時に設定することを,次のように書くことで可能にする。
- readonly name=value
- 引数を指定しない場合、readonlyコマンドはすべての読み取り専用変数の名前を一覧表示する。 -pオプションを指定すると、出力は非対話的な使用に適した形式になる。
- printf format [arguments ...]
- printfは、フォーマットの制御の下、引数をフォーマットし、最初の引数の後に印刷する。 フォーマットは,3種類のオブジェクトを含む文字列である。すなわち,単に標準出力にコピーされるプレーン文字,変換されて標準出力にコピーされる文字エスケープシーケンス,およびフォーマット指定であり,その各々が次の連続する引数の印刷を引き起こす。
- 第1引数以降の引数は,対応する形式がb,c,sのいずれかであれば文字列として扱われ,そうでなければC定数として評価され,次のように拡張される:
- • 先頭のプラスまたはマイナス記号は許容される。
- • 先頭の文字がシングルクォートまたはダブルクォートの場合、値は次の文字のASCIIコードとなる。
- 書式文字列は,引数を満たすのに必要な回数だけ再利用される。 余分な書式指定は,0またはNULL文字列で評価される。
- 文字エスケープシーケンスは、ANSI X3.159-1989("ANSI C89")で定義されているバックスラッシュ表記である。 文字とその意味は次の通りである:
- \a <bell>のキャラクターを書く。
- \b <backspace>文字を書く。
- \e <escape>(ESC)文字を書く。
- \f <form-feed>文字を書く。
- \n <改行>文字を書く。
- \r <carriage return>文字を書く。
- \t <tab>文字を書く。
- \v <垂直タブ>文字を書く。
- \\ バックスラッシュ文字を書き込む。
- \num ASCII値が1桁、2桁、3桁の8進数numである8ビット文字を書く。
- 各フォーマット指定は,パーセント文字(``%)によって導入される。 フォーマット指定の残りは,次の順序で,以下を含む:
- 以下のフラグのうち、0個以上を指定する:
- 代替形式で表示されることを指定する `#' 文字を指定する。 b,c,d,sフォーマットでは,このオプションは何の効果もない。 oフォーマットでは,数値の精度を上げて,出力文字列の最初の文字をゼロにする。 x(エックス)フォーマットでは,0以外の結果には,文字列0x(0X)が先頭に付く。 e、E、f、g、G形式では、小数点以下の桁がない場合でも、結果には常に小数点が含まれる(通常、これらの形式の結果には、小数点以下の桁がある場合にのみ小数点が表示される)。 gおよびGフォーマットでは、末尾のゼロは、他の場合と同様に結果から取り除かれない。
- - マイナス記号 `-' は、指定されたフィールドの出力を左に調整することを指定する;
- + 符号付き書式を使用する場合、数値の前に常に符号を置くことを指定する `+' 文字。
- ' ’ 符号付きフォーマットの場合、正の数の前に空白を残すことを指定する。 両方が使われている場合、`+'はスペースより優先される;
- 0 '0'文字は、空白パディングではなく、ゼロパディングを使用することを示す。 両方が使用される場合、`-' は `0' に優先する;
- Field Width:
- 出力文字列の文字数がフィールド幅より少ない場合,フィールド幅を補うために左側(左調整インジケータが与えられている場合は右側)に空白パディングされる(先行ゼロはフラグであるが,埋め込まれたゼロはフィールド幅の一部であることに注意すること);
- Precision:
- オプションのピリオド,'.'の後に,eおよびf形式の場合は小数点以下の桁数,bおよびs形式の場合は文字列から出力される最大バイト数を指定する精度を与えるオプションの数字文字列が続く;
- Format:
- 使用するフォーマットの種類を示す文字(diouxXfwEgGbcs のいずれか)である。
- フィールドの幅や精度は,数字文字列の代わりに'*'とすることもできる。 この場合,引数でフィールドの幅や精度を指定する。
- フォーマット文字とその意味は次の通りである:
- diouXx 引数は,それぞれ符号付き10進数(dまたはi),符号なし8進数,符号なし10進数,符号なし16進数(Xまたはx)として出力される。
- f 引数は,[-]ddd.dddのスタイルで表示され,小数点以下のdの数が引数の精度指定と等しくなる。 精度がない場合は6桁が与えられ,精度が明示的に0である場合は,桁と小数点は表示されない。
- eE 引数は,[-]d.ddde±ddのスタイルで印刷される。ここで,小数点以下の桁数は引数の精度指定に等しく,精度が不足する場合は6桁が生成される。 E'形式には,大文字のEが使われる。
- gG 引数は,スタイルfまたはスタイルe(E)のどちらか,最小限のスペースで完全な精度を与えるほうで印刷される。
- b 文字列引数の文字は、バックスラッシュ・エスケープ・シーケンスを展開した状態で印刷される。以下の追加バックスラッシュ・エスケープ・シーケンスがサポートされている:
- \c dashを含む文字列オペランドの残りの文字、残りの文字列オペランド、およびformatオペランドの追加文字を無視するようにする。
- \0num ASCII値が1桁、2桁、3桁の8進数numである8ビット文字を書く。
- c 引数の1文字目を印字する。
- s 文字列引数の文字は,末尾に達するか,精度指定で示されるバイト数に達するまで印刷される。精度が省略された場合,文字列のすべての文字が印刷される。
- % 引数なしで `%' を表示する。
- パディングは、指定されたフィールド幅が実際の幅を超える場合にのみ行われる。
- set [{ -options | +options | -- }] arg ...
- setコマンドは、3つの異なる機能を実行する。
- 引数なしで、すべてのシェル変数の値をリストアップする。
- オプションが与えられた場合、引数リスト処理というセクションで説明されているように、指定されたオプションフラグを設定し、またはそれらをクリアする。 特殊なケースとして、オプションが-oまたは+oで引数が与えられない場合、シェルはそのすべてのオプションの設定を印刷する。 オプションが-oの場合,設定は人間が読める形式で印刷され,オプションが+oの場合,設定は,同じオプション設定に影響を与えるためにシェルに再入力するのに適した形式で印刷される。
- setコマンドの3つ目の使い方は、シェルの位置パラメーターの値を指定されたargsに設定することである。 オプションを変更せずに位置パラメータを変更するには、setの第1引数として「--」を使用する。 引数がない場合、setコマンドはすべての位置パラメータをクリアする(「shift $#」を実行するのと同じことである)。
- shift [n]
- 位置パラメータをn回シフトさせる。 シフトは、$1の値を$2の値に、$2の値を$3の値に...と、$#の値を1つずつ減らしていくように設定する。 nが位置パラメータの数より大きい場合、shiftはエラーメッセージを発行し、リターンステータス2で終了する。
- test expression
- [ expression ]
- testユーティリティは、式を評価し、それが真と評価された場合、0(真)の終了ステータスを返し、そうでない場合、1(偽)を返す。 式がない場合、testは1(false)を返す。
- すべての演算子やフラグは、テストユーティリティの個別の引数である。
- 表現を構築するために、以下のプライマリーを使用する:
- -b file fileが存在し、ブロック特殊ファイルである場合はtrueとなる。
- -c file fileが存在し、かつ文字特殊ファイルである場合にtrueとなる。
- -d file ファイルが存在し、ディレクトリであればtrueとなる。
- -e file ファイルが存在する場合、(タイプに関係なく)trueとなる。
- -f file ファイルが存在し、通常のファイルであればtrueとなる。
- -g file ファイルが存在し、そのグループIDフラグが設定されている場合はtrueとなる。
- -h file ファイルが存在し、シンボリックリンクである場合はtrueとなる。
- -k file ファイルが存在し、そのスティッキービットが設定されている場合はtrueとなる。
- -n string 文字列の長さが0でない場合、trueとなる。
- -p file fileが名前付きパイプ(FIFO)であればtrueとなる。
- -r file ファイルが存在し、読み取り可能であればtrueとなる。
- -s file ファイルが存在し、かつサイズが0より大きい場合、trueとなる。
- -t file_descriptor
- ファイルディスクリプタ番号がfile_descriptorであるファイルが開いており、かつ端末と関連付けられている場合にtrueとなる。
- -t file_descriptor
- -u file ファイルが存在し、そのユーザIDフラグが設定されている場合はtrueとなる。
- -w file ファイルが存在し、書き込み可能であればtrueとなる。 Trueは、書き込みフラグがオンであることだけを示す。 このテストが真であっても、読み取り専用ファイルシステム上では、ファイルは書き込み可能ではない。
- -x file ファイルが存在し、実行可能であればtrueとなる。 trueは、実行フラグがオンであることのみを示す。 fileがディレクトリの場合、trueはファイルが検索可能であることを示す。
- -z string 文字列の長さがゼロの場合、trueとなる。
- -L file ファイルが存在し、シンボリックリンクである場合はtrueとなる。 この演算子は、このプログラムの以前のバージョンとの互換性のために残されている。 この演算子の存在に依存せず、代わりに-hを使用する。
- -O file ファイルが存在し、その所有者がこのプロセスの有効なユーザIDと一致する場合、trueとなる。
- -G file ファイルが存在し、そのグループがこのプロセスの有効なグループIDに一致する場合、trueとなる。
- -S file ファイルが存在し、かつソケットであればtrueとなる。
- file1 -nt file2
- file1とfile2が存在し、file1がfile2より新しい場合にtrueとなる。
- file1 -nt file2
- file1 -ot file2
- file1とfile2が存在し、file1がfile2より古い場合にtrueとなる。
- file1 -ot file2
- file1 -ef file2
- file1とfile2が存在し、同じファイルを参照している場合はtrueとなる。
- file1 -ef file2
- string stringがNULL文字列でない場合はtrueとなる。
- s1 = s2 文字列s1、s2が同一であればtrueとなる。
- s1 != s2 文字列s1、s2が同一でない場合にtrueとなる。
- s1 < s2 文字列s1がs2より先に来た場合、それらの文字のASCII値に基づいてtrueとなる。
- s1 > s2 文字列s1がs2の後に来る場合、それらの文字のASCII値に基づいてtrueとなる。
- n1 -eq n2 整数n1、n2が代数的に等しければtrueなる。
- n1 -ne n2 整数n1、n2が代数的に等しくない場合はtrueとなる。
- n1 -gt n2 整数n1が整数n2より代数的に大きい場合にtrueとなる。
- n1 -ge n2 整数n1が整数n2より代数的に大きいか等しい場合に真となる。
- n1 -lt n2 整数n1が整数n2より代数的に小さい場合に真となる。
- n1 -le n2 整数n1が代数的に整数n2より小さいか等しい場合にtrueとなる。
- これらのプライマリーは、以下の演算子で組み合わせることができる:
- !式がfalseの場合、trueとなる。
- expression1 -a expression2
- expression1 と expression2 の両方が真であればtrueとなる。
- expression1 -a expression2
- expression1 -o expression2
- expression1 と expression2 のいずれかが真であればtrueとなる。
- expression1 -o expression2
- (expression) 式がtrueであればtrueとする。
- -a演算子は-o演算子より優先順位が高い。
- times
- シェルおよびシェルから実行されたプロセスの累積ユーザ時間およびシステム時間を表示する。戻りステータスは 0 である。
- trap [action signal ...]
- 指定されたシグナルのいずれかを受信したときに、シェルに解析とアクションの実行を行わせる。シグナルは、シグナル番号またはシグナル名で指定する。 signalが0またはEXITの場合、シェルが終了したときにアクションが実行される。 actionは空()でもよく、この場合指定されたシグナルは無視される。 actionが省略されるか`-'に設定されると、指定されたシグナルはそのデフォルトのアクションに設定される。 シェルがサブシェルからフォークするとき、トラップされた(しかし無視されない)シグナルをデフォルトのアクションにリセットする。 trapコマンドは、シェルに入ったときに無視されたシグナルには効果がない。引数なしのtrapは、同じトラップ結果を達成するシェルの入力として適した形式で、シグナルのリストとそれに関連するアクションを標準出力に書き出す。
- Examples:
- trap
- トラップされた信号とそれに対応するアクションをリストアップする
- trap INT QUIT tstp 30
- Ignore signals INT QUIT TSTP USR1
- trap date INT
- Print date upon receiving signal INT
- type [name ...]
- 各名前をコマンドとして解釈し、コマンド検索の解決策を表示する。 可能な解決方法は,シェルキーワード,エイリアス,シェル組み込み,コマンド,追跡されたエイリアス,見つからなかった,である。 エイリアスの場合は,エイリアスの展開が表示され,コマンドと追跡エイリアスの場合は,コマンドの完全なパス名が表示される.
- ulimit [-H | -S] [-a | -tfdscmlpnv [value]]
- プロセスのハードリミットやソフトリミットについて問い合わせたり、新たなリミットを設定する。 ハードリミット(どのプロセスも違反することは許されず、一度下げたら上げることはできない)とソフトリミット(プロセスがシグナルを受けるが、必ずしも殺されるわけではなく、上げることができる)の選択は、これらのフラグで行うことができる:
- -H ハードリミットをセットあるいは問い合わせる
- -S ソフトリミットを設定または問い合わせる。 -Hも-Sも指定しない場合、ソフトリミットを表示するか、両方のリミットが設定される。 両方が指定された場合、最後に指定されたものが優先される。
- そして、これらのフラグのいずれかを指定することで、質問または設定するリミットを選択する:
- -a 現在制限されているものを表示する
- -t CPU時間の制限を表示または設定する(秒単位)。
- -f 作成できる最大ファイルの上限を表示または設定する(512バイトブロック単位)。
- -d プロセスのデータセグメントサイズの制限を表示または設定する(キロバイト単位)。
- -s プロセスのスタックサイズの上限を表示または設定する(キロバイト単位)。
- -c 生成できる最大のコアダンプサイズの制限を表示または設定する(512バイトブロック単位)。
- -m プロセスが使用できる物理メモリの合計の上限を表示または設定する(キロバイト単位)。
- -l プロセスが mlock(2) でロックできるメモリの上限を表示または設定する (キロバイト単位)。
- -p このユーザーが一度に持つことのできるプロセス数の制限を表示または設定する
- -n プロセスが一度に開くことができるファイル数の制限を表示または設定する
- -v プロセスが使用できる仮想メモリの合計の上限を表示または設定する(キロバイト単位)。
- -r プロセスのリアルタイムスケジューリング優先度の上限を表示または設定する
- これらのいずれもが指定されない場合、表示または設定されるのはファイルサイズの制限値である。 valueが指定されている場合は、その数値が制限値として設定され、そうでない場合は、現在の制限値が表示される。
- sysctlユーティリティを用いて、任意のプロセスの制限値を表示・設定することができる。
- umask [mask]
- umask (umask(2)を参照)の値を、指定された8進数の値に設定する。 引数が省略された場合,umaskの値が表示される。
- unalias [-a] [name]
- nameが指定された場合、シェルはそのエイリアスを削除する。 aが指定された場合、すべてのエイリアスが削除される。
- unset [-fv] name ...
- 指定された変数と関数はアンセットされ、アンエクスポートされる。 -fまたは-vが指定された場合、それぞれ対応する関数または変数が設定解除される。 与えられた名前が変数と関数の両方に対応し、オプションが与えられていない場合、変数のみがアンセットされる。
- wait [job]
- 指定されたジョブが完了するのを待ち、そのジョブ内の最後のプロセスの終了ステータスを返す。 引数が省略された場合、すべてのジョブの完了を待ち、終了ステータスを0として返す。
Command Line Editing
dashがターミナルから対話的に使用されている場合、現在のコマンドとコマンド履歴(Builtinsのfcを参照)は、viモードのコマンドライン編集を使用して編集できる。 このモードでは,viのmanページで説明されているコマンドのサブセットに類似した,以下に説明するコマンドを使用する. コマンドset -o viは、vi-mode編集を有効にし、shをvi挿入モードにする。 viモードを有効にすると、shは挿入モードとコマンドモードの間で切り替えることができる。 viと同様で、⟨ESC⟩を打つとviコマンドモードに入る。 コマンドモード中に⟨return⟩を打つと、その行がシェルに渡される。
EXIT STATUS
構文エラーなど、シェルが検出したエラーは、シェルが0以外の終了ステータスで終了する。 シェルが対話型シェルでない場合、シェルファイルの実行は中断される。 それ以外の場合、シェルは最後に実行されたコマンドの終了ステータスを返すか、またはexit組み込み関数が数値引数とともに使用されている場合、その引数を返す。
ENVIRONMENT
- HOME
- パスワードファイル (passwd) の中のユーザのログインディレクトリから login によって自動的に設定される。 この環境変数は、cd 組み込み関数に対するデフォルトの引数としても機能する。
- PATH
- 実行可能ファイルのデフォルトの検索パスである。 上記の「パスの検索」を参照。
- CDPATH
- cd 組み込み関数で使われる検索パス。
- 新しいメールの到着をチェックするメールファイルの名前。 MAILPATH で上書きされる。
- MAILCHECK
- MAILPATH または MAIL ファイルで指定されたファイルにメールが到着しているかどうか シェルがチェックする頻度を秒数で指定する。 0 に設定すると、各プロンプトでチェックが行われる。
- MAILPATH
- シェルがメールの到着を確認するためのファイル名のコロン ":" で区切られたリスト。 この環境設定は、MAILの設定より優先される。 一度に監視できるメールボックスの数は最大10個である。
- PS1
- 主なプロンプト文字列。デフォルトは "$" で、スーパーユーザーでない場合は "#" になる。
PS2
- 二次プロンプトの文字列。デフォルトは ">" である。
- PS4
- 実行トレース (set -x) が有効な場合に、各行の前に出力する文字列。
- IFS
- 入力フィールドの区切り文字。 これは通常、⟨space⟩、⟨tab⟩、⟨newline⟩に設定されている。 詳細は空白の分割のセクションを参照。
- TERM
- シェルのデフォルトの端末設定。 これはシェルの子にも継承され、履歴編集モードで使用される。
- HISTSIZE
- シェルのヒストリバッファの行数。
- PWD
- 現在の作業ディレクトリの論理値。 cd コマンドで設定する。
- OLDPWD
- 現在の作業ディレクトリの直前の論理値。 cdコマンドで設定される。
- PPID
- シェルの親プロセスのプロセスID。
FILES
- $HOME/.profile
SEE ALSO
csh, echo, getopt, ksh, login, printf, test, getopt(3), passwd, environ(7), sysctl
HISTORY
dash は POSIX に準拠した /bin/sh の実装で、できるだけ小さくなることを目指している。 dash は NetBSD 版 ash (the Almquist SHell) の直系の子孫で、1997 年初めに Linux に移植された。2002年に dash に改名された。
BUGS
Setuid シェルスクリプトは、重大なセキュリティリスクとなるため、絶対に避けるべきである。
PS1、PS2、PS4は、表示する前にパラメータ展開する必要がある。
External link
この記事は、Debianのmanpageの項目を翻訳一部改変しております。 |