本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 1 : ユーザーコマンド (A~M) > k

ksh(1)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

ksh, rksh ― シェル、標準または制限付きコマンドプログラミング言語

構文

ksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ... [+o option] ... [-c string] [arg ...]

rksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ... [+o option] ... [-c string] [arg ...]

説明

ksh は、ターミナルまたはファイルから読み取ったコマンドを実行するコマンドプログラミング言語です。 rksh は、コマンドインタプリタ ksh の制限付きバージョンで、 標準シェルより機能を制限した実行環境を持つログ名の設定に使用されます。 コマンド行オプションと引き数の詳細については、 後述の「ksh の実行」と「特殊コマンド」の項 (特に set コマンドの説明) を参照してください。

定義

メタキャラクタ 

以下のいずれかです。

;  &  (  )  |  <  >  改行  スペース  タブ

空白 

タブまたはスペースのことです。

識別子 

英字またはアンダースコアで始まる、英字、数字、 またはアンダースコアのシーケンスです。識別子は、 関数 および 名称付きパラメータ の名称として用いられます。

ワード 

引用符で囲まれていない 1 つ以上の メタキャラクタによって分離された文字の並びです。

コマンド 

シェル言語の構文に従った文字の並びです。 シェルは各コマンドを読み取り、 目的のアクションを直接または別のユーティリティを呼び出して実行します。

特殊コマンド 

別のプロセスを生成せずにシェルが実行するコマンドです。 「組み込みコマンド」とも呼びます。 説明されている副作用を除けば、ほとんどの特殊コマンドを別のユーティリティとして実現することができます。

#  

# 文字はコメントの始まりとして解釈されます。後述の 「引用」 の項を参照してください。

コマンド

単純コマンド\c は、空白で区切られたワードのシーケンスで、 その前にパラメータ割り当てリストを指定できます (後述の「環境」の項を参照)。 最初のワードは、実行するコマンドの名称を指定します。 残りのワードは、下記に示された要素を除いて、 実行するコマンドに引き数として渡されます。 コマンド名は 0 番目の引き数として渡されます (exec(2) を参照)。単純コマンドの は、コマンドが正常終了した場合には終了ステータス、 異常終了した場合には (8 進数の) 200+ステータス となります (ステータス値のリストについては signal(5) を参照)。

パイプライン は、 | で区切られた 1 つ以上の コマンド のシーケンスです。 最後のコマンドを除く各コマンドの標準出力は、パイプ ( pipe(2) を参照) によって次のコマンドの標準入力に連結されます。 各コマンドは別個のプロセスとして実行され、 シェルは最後のコマンドの終了を待ちます。 パイプラインの終了ステータスは、 パイプラインの最後のコマンドの終了ステータスです。

リスト は、 ;, &, &&, または || で区切られ、オプションの ;, &, または |& で終わる 1 つ以上のパイプラインのシーケンスです。 これらの 5 つの記号のうち、 ;, &, および |& の優先順位は同じです。 && および || の優先順位は同じであり、他のものより上位になります。 記号 セミコロン (;) は、前のパイプラインを逐次実行します。アンパサンド (&) は、その前のパイプラインを非同期的に実行します (つまり、シェルはこのパイプラインの実行の終了を待ちません)。 記号 |& は、親シェルに対して双方向のパイプを設定した形でその前のコマンドまたはパイプラインを非同期的に実行します (コプロセス\c と呼びます)。 親シェルは、 生成したコマンドの標準入力への書き込みや標準出力からの読み取りを、 後述の特殊コマンド readprint-p オプションを用いて実行することができます。 記号 && (||) は、前のパイプラインが戻した値がゼロ (ゼロ以外) の場合にのみ、 その後の リスト を実行します。 リスト の中には、 コマンドの区切りとして、 任意の数の改行をセミコロンの代わりに指定することができます。

コマンド は、 単純コマンドであるか、または以下のいずれかです。 特に説明がない限り、コマンドが戻す値は、そのコマンドの中で最後に実行された単純コマンドが戻す値になります。

for identifier [in word ...] do list done
  

for コマンドが実行されるたびに、 identifier には in word リスト中の次の word が設定されます。 in word ... を省略すると、 for コマンドは、設定されている各位置パラメータにつき 1 回ずつ do list が実行されます (後述の「パラメータの置換」 の項を参照)。 実行は、リスト中にワードがそれ以上なくなると終了します。

select identifier [in word...] do list done
  

select コマンドは、各 word の前に番号を付けた形で一連のワードを標準エラー出力 (ファイル記述子 2) にプリントします。 in word ... を省略すると、代わりに位置パラメータが使用されます (後述の「パラメータの置換」の項を参照)。 PS3 プロンプトがプリントされ、標準入力から 1 行読み取られます。 この行がリストされた word の 1 つの番号で始まる場合には、パラメータ identifier の値はこの番号に一致する word に設定されます。 読み取られた行が空行の場合には、選択リストが再びプリントされます。 それ以外の場合には、パラメータ identifier の値としてヌルが設定されます。 標準入力から読み取られた行の内容は、パラメータ REPLY にセーブされます。 list は、 各選択操作について、 break または end-of-file (eof) が検出されるまで実行されます。

case word in [[ (] pattern [ | pattern] ... ) list ;; ] ... esac
  

case コマンドは、 word と一致する最初の pattern に対応する list を実行します。 パターンの形式はファイル名の生成で使用する形式と同一です (後述の 「ファイル名の生成」 の項を参照)。

if list then list [ elif list then list] ... [ else list] fi
  

if の後の list を実行した結果、ゼロの exit ステータスが戻されると、最初の then の後の list が実行されます。この exit ステータスがゼロ以外の場合には、 elif の後の list が実行され、戻された値がゼロの場合には、次の then の後の list が実行されます。 戻された値がゼロ以外の場合には、 else list が実行されます。 else listthen list も実行されなかった場合、 if はゼロの exit ステータスを戻します。

while list do list done
  

until list do list done
  

while コマンドは while list を繰り返し実行し、リストの最後のコマンドの exit ステータスがゼロならば、 do list を実行します。ゼロ以外の場合には、ループを終了します。 do list の中のコマンドが実行されなかった場合、 while コマンドはゼロの exit ステータスを戻します。 while の代わりに until を使用すれば、ループ終了テストの条件を逆にすることができます。

(list) 

list を別個の環境で実行します。 ネストするために 2 つの左かっこを隣接させる必要がある場合には、算術評価 (後述) を避けるためにスペースを挿入しなければなりません。

{ list;} 

list を実行しますが、別の環境にはなりません。 { はキーワードなので、認識させるには後ろに空白が必要であることに注意してください。

[[ expression ]] 

expression を評価し、 expression が真ならば、ゼロの exit ステータスを戻します。 expression の説明については、 後述の「条件式」 の項を参照してください。 [[]] はキーワードなので、いずれも expression との間に空白が必要であることに注意してください。

function identifier {list;}
  

identifier () {list;}
  

identifier という名称の関数を定義します。 関数の本体は {} の間のコマンドのリスト list です (後述の 「関数」 の項を参照)。

time pipeline 

pipeline が実行され、経過時間、ユーザー時間、およびシステム時間が、 標準エラー出力にプリントされます。 time キーワードは、 pipeline 内のどの位置に指定しても、 pipeline 全体の時間を計測します。 pipeline 内で特定のコマンドの時間を計測する方法については、 time(1) を参照してください。

以下に示すキーワードが認識されるのは、コマンドの最初のワードで、 かつ引用符で囲まれていない場合に限られます。

if then else elif fi case esac for while 
until do done { } function select time [[ ]] 

コメント

# で始まるワードを記述すると、 そのワードおよび改行までのすべての後続の文字が無視されます。

エイリアス化

各コマンドの最初のワードは、そのワードにエイリアス\c が定義されていると、そのエイリアスのテキストに置き換えられます。エイリアス名は任意の個数の文字から構成され、メタキャラクタ、引用符となる文字、ファイル拡張子文字、パラメータ置換文字とコマンド置換文字、および = を除く文字が使用できます。 置換文字列には、上記のメタキャラクタを含む任意の有効なシェルに渡すことが可能な文字を含めることができます。 置換されたテキスト中の各コマンドの最初のワードは、置き換え処理中のもの以外については、さらに他のエイリアスかどうかテストされます。 エイリアスの値の最後の文字が空白\c の場合には、 そのエイリアスの後のワードについても、エイリアスの置換を行うかどうかチェックされます。 エイリアスは特殊な組み込みコマンドの再定義に使用できますが、上記のキーワードの再定義には使用できません。 エイリアスの作成、リスト、エクスポートは alias コマンドを用いて実行可能で、エイリアスの削除は unalias コマンドで実行できます。 エクスポートされたエイリアスはサブシェルでも有効ですが、シェルを実行するたびに別々に初期化し直す必要があります (後述の「ksh の実行」の項を参照)。

エイリアス化\c は、スクリプトが実行されている間にではなく、読み取られる際に行われます。 したがって、エイリアスを実際に有効とするには、そのエイリアスを参照しているコマンドが読み取られる前に alias コマンドが実行されなければなりません。

エイリアスは、絶対パス名の省略形としてよく使用されます。 エイリアス機能のオプションにより、エイリアスの値に、対応するコマンドの絶対パス名を自動的に設定できます。 このようなエイリアスは、パス名をトラックされたエイリアスと呼ばれます。パス名をトラックされたエイリアスの値は、最初に識別子が読み取られたときに定義され、 PATH 変数がリセットされるたびに定義が解除されます。 このエイリアスはパス名をトラックされた状態を維持するため、 次の参照によって再び値が定義されます。 一部のパス名をトラックされたエイリアスは、シェルに組み込まれます。 set コマンドで -h オプションを使用すると、 識別子である各コマンド名がパス名をトラックされたエイリアスに変換されます。

以下のエクスポートされたエイリアスはシェルに組み込まれていますが、 設定の解除または再定義が可能です。

autoload='typeset -fu' 
false='let 0' 
functions='typeset -f' 
hash='alias -t -' 
history='fc -l' 
integer='typeset -i' 
nohup='nohup ' 
r='fc -e -' 
stop='kill -STOP' 
suspend='kill -STOP $$' 
true=':' 
type='whence -v' 

ティルド (~) の置換

エイリアスの置換の実行後、各ワードは、引用符で囲まれていない ~ で始まるかどうかチェックされます。 ~ で始まっている場合には、そのワードの / までの部分が、 /etc/passwd ファイルの中のユーザー名と一致するかどうかチェックされます。 一致するものが見つかると、 ~ および一致したログイン名は、一致したユーザーのログインディレクトリに置き換えられます。 これをティルドの置換と呼びます。 一致するものが見つからなければ、元のテキストは変更されません。 単独の ~ 、あるいは / の前の ~ は、 HOME パラメータの値に置き換えられます。 ~ の後に + または - が続く場合、 ~ はそれぞれパラメータ PWD および OLDPWD の値に置き換えられます。 また、パラメータに割り当てる値が ~ で始まる場合にも、ティルドの置換が実行されます。

コマンドの置換

コマンドを、前にドル符号を付けた小かっこ ($(command)) またはバックコーテーション (\(gacommand\(ga) で囲むことにより、 そのコマンドからの標準出力を 1 つのワードまたはワードの一部として使用することができます。 末尾の改行は削除されます。 2 番目の形式 (旧形式) の場合には、 コーテーションの間の文字列の中に特殊な引用文字があれば、 コマンドの実行前に処理されます (下記の「引用」を参照)。 $(cat file) というコマンド置換の代わりに、より高速で同等な $(<file) を使用できます。 入出力 リダイレクションを実行しない 大部分の特殊コマンド (組み込みコマンド) のコマンド置換は、別のプロセスを生成せずに実行されます。 ただし、関数のコマンド置換によって、その関数および関数内の すべてのコマンド (組み込みまたはそれ以外) を実行するために 別のプロセスが生成されます。

ドル符号が前に付いた二重の小かっこで囲まれた算術式 ($((expression))) は、二重小かっこ内の算術式の値で置き換えられます (算術式の説明については、後述の「算術式の評価」の項を参照)。

パラメータの置換

パラメータ とは、 識別子 、数字 (1 個 - 複数個)、または *, @, #, ?, -, $, および ! のいずれかの文字です。名称付きパラメータは、識別子によって表されるパラメータで、値と属性 (0 個 - 複数個) を持っています。名称付きパラメータには、 typeset 特殊コマンドを用いて値と属性を割り当てることができます。 ksh がサポートしている属性については、 typeset 特殊コマンドの説明とともに後述します。 エクスポートされたパラメータは、値と属性を環境に渡します。

このシェルは、1 次元配列機能を限定的にサポートしています。 配列パラメータの要素は添え字によって参照されます。 添え字は、算術式を [] の間に記述して表します (下記の「算術式の評価」の項を参照)。 配列への値の割り当ては、 set -A name value ... を用いて行います。 添え字の値はすべて 0 から 1023 の範囲になければなりません。 配列を宣言する必要はありません。 有効な添え字による名称付きパラメータへの参照はすべて正当で、 必要に応じて配列が作成されます。 添え字なしで配列を参照すると、配列の最初の要素が参照されます。

名称付きパラメータの値は、次のような記述によって割り当てることもできます。

name=value \c
[name=value] ...

name に整数属性 -i が設定されている場合には、 value に対して後述の算術評価が実行されます。

位置パラメータは、数値で表されるパラメータで、 set 特殊コマンドを用いて値を割り当てることができます。 パラメータ $0 には、シェルの起動時に引き数 0 の値が設定されます。

文字 $ は、置換可能なパラメータを示すために使用します。

${parameter} 

パラメータに値があれば、その値で置き換えます。 parameter の後にパラメータ名の一部と解釈してはならない英字、数字、またはアンダースコアが続く場合、または名称付きパラメータに添え字が付いている場合には、中かっこが必要となります。 parameter が 1 つまたは複数の数字である場合、それは位置パラメータです。 2 個以上の数字の位置パラメータは中かっこで囲まなければなりません。 parameter* または @ の場合には、 $1 以降のすべての位置パラメータに置き換えられます (各位置パラメータはフィールド分離文字で区切られます)。 添え字として * または @ を伴った配列 identifier を指定した場合には、その配列の各要素の値に置き換えられます (各値はフィールド分離文字で区切られます)。 シェルは、 ${ から対応する } まで間のすべての文字を、中かっこやメタキャラクタが中に含まれている場合でも、同じワードの一部分として読み取ります。

${#parameter} 

parameter* または @ の場合には、位置パラメータの数に置き換えられます。 これ以外の場合には、 parameter の値の長さに置き換えられます。

${#identifier[*]}
  

配列 identifier の要素の数に置き換えられます。

${parameter:-word}
  

parameter がヌル以外に設定されている場合には、その値に置き換えられます。 それ以外の場合には、 word に置き換えられます。

${parameter:=word}
  

parameter が未設定またはヌルの場合には、 parameterword に設定され、その後でパラメータの値に置き換えます。 位置パラメータをこの方法で割り当てることはできません。

${parameter:?word}
  

parameter がヌル以外に設定されている場合には、その値に置き換えます。 それ以外の場合には、 word をプリントし、シェルから抜け出します。 word を省略した場合には、標準メッセージがプリントされます。

${parameter:+word}
  

parameter がヌル以外に設定されている場合には、 word に置き換えられます。それ以外の場合、置換は実行されません。

${parameter#pattern}
  

${parameter##pattern}
  

patternparameter 値の最初の部分と一致した場合には、その parameter の値から一致した部分を削除した値が、置換結果の値となります。 それ以外の場合には、この parameter の値に 『置き換えられます』。第 1 の形式の場合には、最小のマッチングパターンが削除され、第 2 の形式の場合には、最大のマッチングパターンが削除されます。

${parameter%pattern}
  

${parameter%%pattern}
  

patternparameter の値の最後の部分と一致した場合には、その parameter の値から一致した部分を削除した値に置き換えられます。 それ以外の場合には、parameter の値に置き換えられます。第 1 の形式の場合には、最小のマッチングパターンが削除され、第 2 の形式の場合には、最大のマッチングパターンが削除されます。

  • 上記の場合、 word の評価は、 word が置換結果となる文字列として使用されない限り、実行されません。したがって、次の例では、 d が未設定の場合かヌルの場合に限って pwd が実行されます。

    echo ${d:-$(pwd)} 

  • 上記のそれぞれの式からコロン (:) を省略すると、シェルは parameter が設定されているかどうかのみをチェックします。

以下のパラメータはシェルが自動的に設定します。

#  

位置パラメータの数 (10 進数)

-  

シェルの起動時に、または set コマンドによって、シェルに渡されたオプション

?  

最後に実行したコマンドが戻した 10 進値

$  

このシェルのプロセス番号

_  

_ の初期値は、実行中のシェルまたはスクリプトの環境に渡された絶対パスです。 その後、前のコマンドの最後の引き数が割り当てられます。 ただし、非同期で実行されるコマンドについては、 このパラメータは設定されません。 このパラメータは、メールのチェックの際に、一致した MAIL ファイルの名称を保持するのにも使用されます。

!  

最後に実行されたバックグラウンドコマンドのプロセス番号

COLUMNS  

この変数が設定されていると、この変数の値を使用して、 シェルのエディットモードと select のリスト表示用のエディットウィンドウの幅が規定されます。 ウィンドウ環境では、シェルはウィンドウサイズの変化を検出すると、 COLUMNS の値をアップデートします。

ERRNO  

異常終了した最後のシステムコールによって設定された errno の値です。 この値はシステム依存で、デバッグに使用されます。

LINENO  

実行中のスクリプトまたは関数内の現在の行の行番号

LINES  

この変数に値を設定すると、その値を用いて select コマンドのリスト表示のカラム長が決定されます。 select コマンドのリストは LINES の値の約 3 分の 2 の行数に達するまで、縦方向にプリントされます。 ウィンドウ環境では、シェルはウィンドウサイズの変化を検出すると、 LINES の値をアップデートします。

OLDPWD  

cd コマンドが設定した前のワーキングディレクトリ

OPTARG  

getopts 特殊コマンドが処理した最後のオプション引き数の値

OPTIND  

getopts 特殊コマンドが処理した最後のオプション引き数のインデックス

PPID  

シェルの親プロセスのプロセス番号

PWD  

cd コマンドが設定した現在のワーキングディレクトリ

RANDOM  

このパラメータが評価されるたびに、0 から 32767 の間に一様分布する整数の乱数が生成されます。 RANDOM に数値を割り当てれば、乱数のシーケンスを初期化できます。

REPLY  

このパラメータは、 select 文によって、また引き数の指定がない場合の read 特殊コマンドによって設定されます。

SECONDS  

このパラメータが参照されるたびに、シェルの実行後に経過した秒数が戻されます。このパラメータに値が割り当てられている場合には、このパラメータの参照時に戻される値は、割り当てられた値に、割り当て後の経過秒数を加えた数値になります。

以下のパラメータはシェルによって使用されます。

CDPATH  

cd コマンド用の捜索パス

EDITOR  

この変数の値が emacs, gmacs, または vi で終わっており、しかも VISUAL 変数が設定されていない場合には、対応するオプションがオンになります (後述の「特殊コマンド」の項の set を参照)。

ENV  

このパラメータが設定されている場合には、その値に対して置換を実行することにより、 シェルの起動時に実行するスクリプトのパス名を生成します (後述の「ksh の実行」の項を参照)。 通常、このスクリプトファイルは、 エイリアス関数を定義するために使用されるものです。

FCEDIT  

fc コマンド用のデフォルトエディター名

FPATH  

関数定義用の検索パスです。 -u 属性を持つ関数が参照されたとき、 およびコマンドが見つからないときにこのパスが検索されます。 実行可能ファイルが見つかった場合、そのファイルは現在の環境内で読み取られて実行されます。

IFS  

内部的なフィールド分離文字で、通常は、 スペースタブ 、および 改行 です。これは、コマンドやパラメータの置換で生成されたコマンドワードを区切ったり、特殊コマンド read による入力行をワードに分割するために使用されます。 IFS パラメータの最初の文字は、 "$*" の置換で引き数を区切るために使用されます (後述の「引用」の項を参照)。

HISTFILE  

シェルの起動時にこのパラメータを設定すると、このパラメータの値は、 コマンドの履歴の保存に使用されるファイルのパス名となります。 デフォルト値は $HOME/.sh_history です。ユーザーが適切な特権を持ち、 HISTFILE が設定されていない場合には、ヒストリファイルは使用されません ( 後述の「コマンドの再入力」の項を参照)。

HISTSIZE  

シェルの起動時にこのパラメータを設定すると、 前に入力したコマンドがこのパラメータの値以上の個数だけ保存され、 このシェルでアクセス可能となります。デフォルト値は 128 です。

HOME  

cd コマンドのデフォルト引き数 (ホームディレクトリ)

MAIL  

このパラメータにメールファイル名が設定され、 MAILPATH パラメータは設定されていない場合、シェルは指定されたファイルへのメールの到着をユーザーに通知します。

MAILCHECK  

この変数は、 MAILPATH または MAIL パラメータで指定された全ファイルの変更時刻の変化を シェルがチェックする頻度 (秒単位) を指定します。デフォルト値は 600 秒です。指定された時間が経過すると、 シェルは次のプロンプトを表示する前にこのチェックを実行します。

MAILPATH  

これは、コロン (:) で区切ったファイル名のリストです。 このパラメータが設定されている場合、シェルは、 ここで指定されたファイルに対して直前の MAILCHECK 秒内に行われた変更をすべてユーザーに通知します。 各ファイル名の後には ? およびプリントするメッセージを続けることができます。 その場合、このメッセージに対してはパラメータ置換とコマンド置換が実行され、 パラメータ $_ は、変更されたファイルの名称に置き換えられます。 デフォルトのメッセージは you have mail in $_ です。

PATH  

コマンドの捜索パスです (後述の「実行」の項を参照)。 rksh を実行している場合には、 .profile ファイル以外の場所で PATH を変更することはできません。

PS1  

このパラメータの値は、 パラメータの置換で展開され、1 次プロンプト文字列 (デフォルトは スペース文字が後続する $ ) を規定します。1 次プロンプト文字列の中の文字 ! はコマンド番号に置き換えられます (後述の「コマンドの再入力」の項を参照)。 プロンプトに ! を入れるには、 !! を使用します。

PS2  

2 次プロンプト文字列で、デフォルトはスペース文字が後続する > です。

PS3  

select ループの中で使用される選択プロンプト文字列で、デフォルトは #? です。

PS4  

このパラメータの値は、パラメータの置換で展開され、 実行トレースの各行の前に表示されます。 PS4 が設定されていない場合、実行トレースプロンプトはスペース文字が後続する + となります。

SHELL  

これはシェルのパス名で、環境内に保持されます。 この変数の値のベース名の部分に r が含まれる場合、シェルは制限付きのシェルとして起動されます。

TMOUT  

ゼロよりも大きな値を設定すると、 PS1 プロンプトが表示されてから一定の秒数内にコマンドが入力されない場合、 シェルは終了します。

VISUAL  

この変数の値が、 emacs, gmacs, または vi で終わる場合、対応するコマンドが実行されます (後述の「特殊コマンド」の項の set を参照)。

シェルはパラメータ PATH, PS1, PS2, MAILCHECK, TMOUT, および IFS にデフォルト値を設定します。パラメータ HOME, SHELL, ENV, および MAIL については、シェルは値を自動的に設定しません。 HOME, SHELL, および MAIL は、 login(1) が設定します。

ブランクの解釈

パラメータの置換とコマンドの置換の実行後、 置換の結果として生成されたテキストの中からフィールド分離文字 (IFS に設定された文字) が捜し出され、フィールド分離文字の位置でテキストが分割され、それぞれ別個の引き数になります。 ksh は、明示的なヌル引き数 ( または '') はそのまま残しますが、(値を持たない parameters から生成された) 暗黙のヌル引き数は削除します。

ファイル名の生成

置換の実行後、各コマンドの word は、 -f オプションが 設定 されていない限り、 1 つのパターンとして処理され、ファイル名展開されます。 パターンの形式は、 regexp(5) で定義されているパターンマッチング表記です。 ワードは、そのパターンと一致したファイル名のソート結果で置き換えられます。 パターンと一致するファイル名が見つからない場合、ワードは変更されません。

regexp(5) で説明されている表記法のほか、 ksh は、1 つまたは複数のパターンリスト | で区切ったもの) から構成された複合パターンを認識します。 複合パータンは以下の形式で指定することができます。

?(pattern-list) 

指定されたパターンのいずれか 1 つと一致することがあります。

*(pattern-list) 

指定されたパターンの 0 個以上と一致します。

+(pattern-list) 

指定されたパターンの 1 個以上と一致します。

@(pattern-list) 

指定されたパターンのいずれか 1 個だけと一致します。

!(pattern-list) 

指定されたパターン以外の任意のものと一致します。

コーテーションの使用

前述の メタキャラクタ (「定義」 の項を参照) はそれぞれシェルにとって特殊な意味があり、引用符で囲まない限り、ワードを終了させます。文字の前に \ を記述することにより、その文字を引用\c する (文字自体の本来の意味を表現させる) ことができます。 \new-line という文字ペアは無視されます。 1 組のシングルコーテーションマーク ('') で囲んだ文字はすべて引用されます。 シングルコーテーションの中にシングルコーテーションを入れることはできません。 ダブルコーテーションマーク ("") の中では、パラメータの置換とコマンドの置換が実行され、 \ によって、文字 \, \(ga, ", および $ が引用されます。 $* および $@ の意味は、引用されていない場合あるいはパラメータへの割り当て値やファイル名として使用された場合には、同一となります。 しかし、コマンド引き数として使用すると、 "$*""$1d$2d..." (ただし dIFS パラメータの最初の文字) と同等になるのに対して、 "$@""$1" "$2" と同等になります。 バックコーテーションマーク (\(ga\(ga) の中では、 \ によって、文字 \, \(ga, および $ が引用されます。 ダブルコーテーションの中にバックコーテーションが存在する場合には、 \ 文字 "\ で引用しなければなりません。

キーワードやエイリアスの特殊な意味は、 キーワードの任意の文字を引用することによって取り除くことができます。 ただし、後述の項でリストされている関数名と特殊コマンド名については、 引用しても別の意味に認識させることはできません。

算術式の評価

整数演算は、特殊コマンド let によって実行することができます。評価は long 型の算術演算を用いて実行されます。 定数は [base#]n の形式で、 base は算術演算基数を表す 2 から 36 までの 10 進数、 n はその基数表現での数値です。 base を省略すると、基数として 10 が使用されます。

算術式は、C 言語の式と同一の構文、優先順位、結合法則を使用します。 ++, --, ?:, および , を除くすべての整数演算子がサポートされています。 算術式の中では、変数への参照をパラメータ置換構文を使用せずに名称によって行うことができます。 変数が参照されると、その値が算術式として評価されます。

変数の内部的な整数表現は、 typeset 特殊コマンドの -i オプションを用いて指定することができます。 算術評価は、各変数に -i 属性で代入された値に対して行われます。 演算基数を指定しない場合には、変数への最初の割り当てによって演算基数が決定されます。 この基数は、パラメータ置換の実行時に使用されます。

多数の算術演算子は引用を必要とするので、 let コマンドの代わりとなる構文が用意されています。 (( で始まるすべてのコマンドについて、 対応する )) までの間のすべての文字は、引用された式として処理されます。 より正確には、 ((...))let "..." と同等です。

プロンプト

シェルを対話的に使用すると、シェルはコマンドを読み取る前に PS1 の値をプロンプトとして表示します。改行の入力後、 コマンドを完結させるために入力がさらに必要な場合には、2 次プロンプト ( PS2 の値) が表示されます。

条件式

条件式は、ファイルの属性のテストや文字列の比較を行うために、 [[ 複合コマンドとともに使用されます。ワードの分割とファイル名の生成は、 [[]] の間にあるワードに対しては実行されません。 各条件式は、以下に示す単項式または 2 項式を 1 個以上使用して構成することができます。

-a file 

file が存在すれば真となります。

-b file 

file が存在し、ブロックスペシャルファイルであれば、真となります。

-c file 

file が存在し、キャラクタスペシャルファイルであれば、真となります。

-d file 

file が存在し、ディレクトリであれば、真となります。

-f file 

file が存在し、通常ファイルであれば、真となります。

-g file 

file が存在し、その setgid ビットがセットされていれば、真となります。

-h file 

file が存在し、シンボリックリンクであれば、真となります。

-k file 

file が存在し、スティッキービットがセットされていれば、真となります。

-n string 

string の長さがゼロ以外であれば、真となります。

-o option 

option という名称のオプションがオンであれば、真となります。

-p file 

file が存在し、FIFO スペシャルファイルまたはパイプであれば、真となります。

-r file 

file が存在し、現在のプロセスによって読み取り可能であれば、真となります。

-s file 

file が存在し、サイズがゼロより大きければ、真となります。

-t fildes 

fildes が示す番号のファイル記述子がオープンしており、ターミナルデバイスに関連づけられていれば、真となります。

-u file 

file が存在し、その setuid ビットがセットされていれば、真となります。

-w file 

file が存在し、現在のプロセスによって書き込み可能であれば、真となります。

-x file 

file が存在し、現在のプロセスによって実行可能であれば、真となります。 file が存在し、ディレクトリの場合には、現在のプロセスがそのディレクトリの検索パーミッションを持っていれば、真となります。

-z string 

string の長さがゼロであれば、真となります。

-L file 

file が存在し、シンボリックリンクであれば、真となります。

-O file 

file が存在し、このプロセスのエフェクティブユーザー ID と同じ ID を持つユーザーに所有されていれば、真となります。

-G file 

file が存在し、そのグループがこのプロセスのエフェクティブグループ ID と一致していれば、真となります。

-S file 

file が存在し、ソケットであれば、真となります。

file1 -nt file2 

file1 が存在し、 file2 より新しいファイルであれば、真となります。

file1 -ot file2 

file1 が存在し、 file2 より古いファイルであれば、真となります。

file1 -ef file2 

file1 および file2 が存在し、両者が同じファイルを参照していれば、真となります。

string = pattern 

stringpattern と一致すれば、真となります。

string != pattern
  

stringpattern と一致しなければ、真となります。

string1 < string2
  

両者を構成する文字を ASCII 値に基づいて比較して、 string1string2 より前の文字列であれば、真となります。

string1 > string2
  

両者を構成する文字を ASCII 値に基づいて比較して、 string1string2 より後の文字列であれば、真となります。

exp1 -eq exp2 

exp1exp2 と等しければ、真となります。

exp1 -ne exp2 

exp1exp2 と等しくなければ、真となります。

exp1 -lt exp2 

exp1exp2 より小さければ、真となります。

exp1 -gt exp2 

exp1exp2 より大きければ、真となります。

exp1 -le exp2 

exp1exp2 以下であれば、真となります。

exp1 -ge exp2 

exp1exp2 以上であれば、真となります。

複合式は、以下の表記の任意のものを用いて、上記のプリミティブから構成することができます (以下のリストは優先順位が高い順です)。

(expression) 

expression が真であれば、真となります。これは、式をまとめるのに使用されます。

! expression 

expression が偽であれば、真となります。

expression1 && expression2
  

expression1expression2 が両者とも真であれば、真となります。

expression1 || expression2
  

expression1expression2 のいずれか一方が真であれば、真となります。

入力/出力

コマンドの実行前に、シェルによって解釈される特殊な表記法を用いて、 コマンドの入力と出力をリダイレクトすることができます。 以下に示す各表記は、単純コマンド内の任意の位置、またはコマンドの前後に記述するすることが可能ですが、起動したコマンドには渡されません。 コマンドの置換とパラメータの置換は、以下で特に注記されている場合を除き、 word または digit が使用される前に実行されます。ファイル名の生成は、 パターンが単一のファイルに一致した場合に限って実行されます。 空白の解釈は行われません。

<word 

ファイル word を標準入力 (ファイル記述子 0) として使用します。

>word 

ファイル word を標準出力 (ファイル記述子 1) として使用します。ファイルが存在しない場合は作成されます。 ファイルが存在し、しかも noclobber オプションがオンの場合には、エラーとなります。オフの場合には、 ファイルは切り捨てられて長さがゼロとなります。

>|word 

noclobber オプションを無効にすることを除き、 > と同じです。

>>word 

ファイル word を標準出力として使用します。 ファイルが存在する場合には、出力をファイルの末尾に追加します (まずエンドオブファイルを捜します)。 ファイルが存在しない場合は作成されます。

<>word 

標準入力として読み書きするため、ファイル word をオープンします。ファイルが存在しない場合は作成されます。

<<[-]word 

word と一致する行またはエンドオブファイルまで、シェル入力が読み取られます。 word に対しては、パラメータの置換、コマンドの置換、ファイル名の生成は、 いずれも実行されません。 生成されたドキュメントは、ヒアドキュメント\c と呼ばれるもので、 標準入力になります。 word のいずれかの文字が引用されている場合、ドキュメントの文字は解釈されません。 それ以外の場合には、ドキュメントに対してパラメータの置換とコマンドの置換が実行されて、 \new-line は無視され、さらに \ を用いて文字 \, $, \(ga, および word の最初の文字を引用する必要があります。 -<<, の後に指定すると、先行するタブがすべて word とドキュメントから除去されます。

<&digit 

標準入力がファイル記述子 digit から複写されます (dup(2) を参照)。

>&digit 

標準出力がファイル記述子 digit に複写されます (dup(2) を参照)。

<&-  

標準入力がクローズされます。

>&-  

標準出力がクローズされます。

<&p  

コプロセスからの入力を標準入力に移します。

>&p  

コプロセスへの出力を標準出力に移します。

上記のいずれかの表記の前に数字を指定すると、参照されるファイル記述子の番号は、(デフォルトの 0 または 1 ではなく) その数字によって指定された番号になります。 たとえば、

... 2>&1

と指定すると、 ファイル記述子 2 がファイル記述子 1 の複製として書き込みのためにオープンされます。

リダイレクトの順序は重要です。 シェルは、評価の際に、指定ファイル記述子に対応する 現在オープンされているファイルにより ファイル記述子を参照して 各リダイレクションを評価するからです。 たとえば、

...  1>fname 2>&1

は、まずファイル記述子 1 (標準出力) をファイル 『 fname 』 に割り当てます。次に、ファイル記述子 2 (標準エラー) を、ファイル記述子 1 に割り当てられているファイル (つまり fname ) に割り当てます。 一方、このリダイレクトの順序を次のように逆にすると、

...  2>&1 1>fname

ファイル記述子 2 には現在の標準出力 (異なる割り当てを継承しなければユーザーターミナル) が割り当てられます。 次にファイル記述子 1 がファイル fname に割り当て直され、ファイル記述子 2 の割り当ては変化しません。

コプロセスの入力と出力は、 番号で指定したファイル記述子に移動させることができるので、上記のリダイレクト演算子を用いれば、他のコマンドはそのファイル記述子との間で読み書きが可能となります。 現在の コプロセスの入力が、 番号で指定されたファイル記述子に移されると、他の コプロセスが起動されます。

ジョブ制御がアクティブでない場合にコマンドの後ろに & を指定すると、このコマンドのデフォルトの標準入力は空のファイル /dev/null になります。 それ以外の場合には、コマンドを起動したシェルのファイル記述子が、入力/出力の指定によって修正された形で、そのコマンドの実行環境に取り込まれます。

環境

環境 ( environ (5) を参照) とは、実行されるプログラムに渡される名称と値のペアのリストで、 通常の引き数リストによく似ています。 名称は 識別子 でなければならず、 値は文字列です。 シェルは数種の方法で環境と対話します。 シェルは、起動時に環境を走査し、見つかった名称ごとにパラメータを生成して対応する値を付与し、 エクスポートのマークを付けます。 実行されるコマンドは環境を継承します。 ユーザーが export または typeset -x コマンドを用いてこれらのパラメータの値を修正したり、 新しいパラメータを作成した場合、その値は環境の一部分になります。 したがって、実行されるコマンドから見た環境は、シェルが最初に継承した名称と値のペア (この値は現在のシェルが修正することもあります) と、任意の追加項目 (これは export または typeset -x コマンドで指示する必要があります) から構成されます。

任意の単純コマンド\c や関数の環境は、既存の環境の前にパラメータ割り当て (複数可) を追加することによって増強することができます。 パラメータ割り当て引き数は identifier=value の形式です。 たとえば、

TERM=450 cmd args

(export TERM; TERM=450; cmd args)

とは、上記の cmd の実行に関する限り、同等です (ただし、後述の項にリストしたパーセント符号が前に付く特殊コマンドを除く)。

-k オプションを設定すると、すべてのパラメータ割り当て引き数は、 コマンド名の後に指定されていても環境内に取り込まれます。 次の最初のエコー文は a=b c をプリントしますが、 -k オプションが設定された後の、2 番目のエコー文は c のみをプリントします。

echo a=b c 
set -k 
echo a=b c 

この機能は、シェルの初期バージョン用に作成されたスクリプトでの使用を目的としたものなので、新しいスクリプトでこの機能を使用することは避けてください。この機能は、将来廃止される可能性があります。

関数

前述の「コマンド」の項で説明した function キーワードは、シェル関数を定義するために使用します。 シェル関数が読み取られると、内部に保存されます。 エイリアス名は、関数が読み取られたときに解決されます。 関数はコマンドと同様に実行され、引き数は位置パラメータとして渡されます (後述の「実行」の項を参照)。

関数は、呼び出し側と同じプロセスで実行されますが、関数のコマンド置換によって新しいプロセスが生成される点が異なります。 関数は、すべてのファイルと現在のワーキングディレクトリを呼び出し側と共用します。 呼び出し側がキャッチしたトラップは、 関数内ではそのデフォルトのアクションが行われません。 関数がキャッチしない、または無視するトラップ条件が発生すると、 関数の実行は終了し、その条件は呼び出し側に渡されます。 関数内部で EXIT に対して設定されたトラップは、関数の終了後に呼び出し側の環境の中で実行されます。 通常の場合、変数は呼び出しプログラムと関数の間で共用されます。 ただし、関数内で typeset 特殊コマンドを使用して定義した変数は、現在の関数および現在の関数が呼び出す全関数を有効範囲とするローカル変数となります。

関数呼び出しから戻るには、特殊コマンド return を使用します。 関数内でエラーが発生すると、制御は呼び出し側に戻ります。

関数識別子は typeset 特殊コマンドの +f オプションを用いてリストすることができます。 関数識別子と関数の関連テキストは -f オプションを用いてリストすることができます。 関数の定義を解除するには、 unset 特殊コマンドの -f オプションを使用します。

通常、シェルがシェルスクリプトを実行すると、関数は設定が解除されます。 typeset コマンドの -xf オプションにより、実行するスクリプトに対して、シェルを再実行せずに関数をエクスポートすることができます。 シェルの起動ごとに共通に定義する必要がある関数は ENV ファイルに入れておく必要があります。

ジョブ

set コマンドの monitor オプションがオンの場合、 対話型シェルはジョブ\c を各パイプラインに関連づけます。 対話型シェルは、現在のジョブのテーブル (jobs コマンドでプリントされるテーブル) を管理し、各ジョブに小さな整数値を割り当てます。ジョブが & によって非同期に開始されると、シェルは次のような行をプリントします。

[1] 1234 

これは、ジョブ番号 1 が非同期に開始され、プロセス ID が 1234 のプロセスが、トップレベルのプロセスとして実行されたことを示します。

ジョブの実行中に別の操作を行いたい場合には、 一時停止文字 (通常は ^Z (Ctrl-Z)) を入力して、 現在のジョブに STOP シグナルを送ることができます。 すると、シェルはジョブが中断された (`Stopped') ことを示し、 別のプロンプトをプリントします。 これにより、 ユーザーはそのジョブの状態を操作することが可能となり、まず bg コマンドを用いてジョブをバックグラウンドに変更してから、 このジョブが停止しているか、あるいはバックグラウンドで動作している間、 他のコマンドを実行し、最後に fg コマンドを用いてジョブを再開するか、あるいはフォアグラウンドに戻すことができます。 ^Z は入力後ただちに作用し、割り込みと同様に、 ^Z をタイプするとペンディング状態の出力と読み取り前の入力は破棄されます。

バックグラウンドで実行中のジョブは、ターミナルから入力を読み取ろうとすると実行が停止します。通常、バックグラウンドジョブは出力を実行できますが、 stty tostop コマンドによって抑止することができます。 この tty オプションを設定すると、バックグラウンドジョブは、出力を実行しようとすると停止します。

シェルの中でジョブを参照する方法はいくつかあります。ジョブの参照は、ジョブの中の任意のプロセスのプロセス ID によって、または以下のいずれかの指定形式で行うことができます。

%number 

指定された番号のジョブ

%string 

コマンド行が string で始まるすべてのジョブ

%?string 

コマンド行に string を含むすべてのジョブ

%%  

現在のジョブ

%+  

%% と同義

%-  

前のジョブ

シェルは、プロセスの状態の変化をただちに認識します。 ジョブがブロックされ、それ以上実行を継続できなくなると、 シェルはプロンプトを表示する直前にユーザーに通知します。

モニターモードがオンの場合には、バックグラウンドジョブが終了するたびに CHLD に対して設定したトラップが引きおこされます。

ジョブの実行中または停止中にシェルを終了させようとすると、 You have stopped (running) jobs という警告メッセージが表示されます。 この場合には、 jobs コマンドを使用して、対象となったジョブを識別することができます。そのまま再度シェルを終了させようとすると、シェルは 2 回目の警告は行わず、停止していたジョブは終了します。

シグナル

実行中のコマンドに対する INT および QUIT シグナルは、コマンドの後に & が指定され、しかも monitor オプションがオフの場合には無視されます。 それ以外の場合、シグナルの値は、シグナル 11 の場合を除いて、 シェルが親プロセスから継承した値となります (ただし、後述の trap コマンドも参照)。

実行

置換は、コマンドが実行されるたびに行われます。 コマンド名が後述の項にリストされた『特殊なコマンド』の 1 つと一致した場合、 そのコマンドは現在のシェルプロセスの中で実行されます。 次に、 ksh は、コマンド名がユーザー定義関数のいずれかと一致するかどうか調べます。 一致した場合、 ksh は位置パラメータをいったんセーブし、 代わりにその関数呼び出しの引き数を設定します。 位置パラメータ 0 が関数名に設定されます。 関数が終了すると、 または return を実行すると、 ksh は位置パラメータリストを復元し、関数の中で EXIT に対して設定されたすべてのトラップを実行します。 関数の値は、 最後に実行されたコマンドの値になります。 関数は、現在のシェルプロセスで実行されます。 コマンド名が特殊なコマンドでもユーザー定義の関数"\c でもない場合、 ksh はプロセスを生成し、 exec ( exec(2) を参照) を用いてそのコマンドを実行しようとします。

シェルパラメータ PATH は、コマンドが格納されているディレクトリの検索パスを定義します。 代替ディレクトリ名はコロン (:) で区切ります。 デフォルトのパスは /usr/bin: です (これは /usr/bin, そして現在のディレクトリの順でパスを指定したものです)。 現在のディレクトリは、ヌルのパス名で表され、等号の直後、2 つのコロン (デリミタ) の間、またはパスリストの最後に指定できます。 コマンド名に / が含まれる場合には、検索パスは使用されません。 含まれない場合には、パスに指定されている各ディレクトリで、実行可能ファイルの検索が行われます。 ファイルに実行パーミッションがあるにもかかわらず、ディレクトリでも実行可能なオブジェクトコードファイルでもない場合、そのファイルはスクリプトファイル (インタプリタ用のデータを格納したファイル) であるとみなされます。スクリプトファイルの最初の 2 文字が #! である場合、 exec ( exec(2) 参照) は、その 2 文字の後にインタプリタのパス名が続くものとみなします。 続いて、 exec により、指定されたインタプリタが別個のプロセスとして実行され、スクリプトファイル全体が読み取られます。 exec の呼び出しに失敗した場合には、 /usr/bin/ksh が生成され、スクリプトファイルの解釈が実行されます。 この場合、エクスポートされていないエイリアス、関数、および名称付きパラメータはすべて削除されます。 シェルコマンドファイルに読み取りパーミッションがない場合、または setuid ビットと setgid ビットの少なくとも一方がファイルにセットされている場合、シェルは代理のシェルに、パーミッションをセットアップさせ、シェルコマンドファイルをオープンファイルとして渡す形でシェルを実行させます。 また、小かっこで囲まれたコマンドも、エクスポートされていない要素を削除せずにサブシェルとして実行されます。

コマンドの再入力

ターミナルデバイスから入力されたコマンドのテキストは、最後から HISTSIZE で指定された個数分 (デフォルトは 128) だけヒストリ\c ファイルにセーブされます。 ファイル $HOME/.sh_history は、 HISTFILE 変数が設定されていない場合、または書き込み可能でない場合に使用されます。 シェルは、同じ名称の HISTFILE を使用しているすべての対話型\c シェルのコマンドにアクセスすることができます。 特殊コマンド fc を使用すれば、このファイルの一部をリストまたはエディットできます。 ファイルの中のエディットまたはリストしたい部分の選択は、番号によって、またはコマンドの最初の文字 (複数可) の指定によって行うことができます。 単一のコマンドまたはある範囲のコマンドのいずれの指定も可能です。 fc コマンドの引き数としてエディタープログラムを指定しない場合には、パラメータ FCEDIT の値が使用されます。 FCEDIT が定義されていない場合には、 /usr/bin/ed が使用されます。 エディットしたコマンドはプリントされ、エディターの終了時に再実行されます。 エディター名として - を使用すると、エディット操作の段階をスキップしてコマンドを再実行することができます。 この場合、 old=new という形式の置換パラメータを使用すれば、実行前にコマンドを修正できます。 たとえば、 rfc -e - のエイリアスである場合に、 r bad=good c と入力すると、英字 c で始まるコマンドのうち最後に実行されたものを再実行し、最初に検出した文字列 bad を、文字列 good に置き換えます。

以下の条件のすべてが発生する場合に、ヒストリファイルはトリミングされます。

  • ヒストリファイルのサイズが 4 キロバイトを超える。

  • ヒストリファイル内のコマンド数が HISTSIZE を超える。

  • ファイルが 10 分前から変更されていない。

  • ユーザーが、ヒストリファイルが格納されているディレクトリの書き込みパーミッションを持っている。

上記の条件のいずれか 1 つでも発生しない場合には、ヒストリファイルはトリミングされません。ヒストリファイルがトリミングされるときに、そのヒストリファイル内で最新の HISTSIZE コマンドが使用できます。

特殊コマンド

以下に示す単純コマンドは、シェルプロセスの中で実行されます。 これらのコマンドでは、入出力のリダイレクトが可能です。 特に指定されない限り、ファイル記述子 1 はデフォルトの出力先となり、exit ステータスは、構文エラーがなければゼロとなります。 % または %% が前に付記されているコマンドは、次のように特別に処理されます。

1. 

コマンドの前にある変数割り当てリストは、コマンドの実行が完了しても有効です。

2. 

I/O のリダイレクトは、変数割り当ての後に実行されます。

3. 

ある特定のエラーが発生すると、そのエラーが存在するスクリプトは打ち切られます。

4. 

%% が前に付記されたコマンドの後に示されている、 変数割り当ての形式の各ワードは、それぞれ変数割り当ての場合と同じ規則によって展開されます。 つまり、ティルドの置換は = 符号の後で実行され、ワードの分割とファイル名の生成は実行されないことになります。

% : [arg ...] 

このコマンドは、パラメータの展開のみを実行します。 ゼロの exit コードが戻されます。

% . file [arg ...]
  

file からコマンドを読み取って実行してから、制御を戻します。 コマンドは現在のシェル環境内で実行されます。 file が存在するディレクトリの検索は、 PATH で指定された検索パスを使用して実行されます。 引き数 arg が指定された場合、その引き数が位置パラメータになります。 指定されなかった場合には、位置パラメータは変更されません。 exit ステータスは、最後に実行されたコマンドの exit ステータスです。 file に対して実行パーミッションビットをセットする必要はありません。

%% alias [-tx] [name[=value] ...]
  

alias を引き数なしで実行すると、エイリアスリストが name=value の形式で標準出力にプリントされます。 エイリアスは、 value が指定された名称それぞれに対して定義されます。 value 最後がスペースであると、次のワードでエイリアス置換のチェックが行われます。 -t オプションは、パス名をトラックされたエイリアスの設定とリストのために使用します。 パス名をトラックされたエイリアスの値は、指定された name に対応する絶対パス名です。 パス名をトラックされたエイリアスの値は、 PATH の値がリセットされると未定義になりますが、 そのエイリアスはパス名をトラックされた状態を維持します。 -t オプションを指定しない場合には、引き数リスト内で value の指定がない各 name について、名称と値がプリントされます。 -x オプションは、エクスポートされたエイリアスの設定またはプリントに使用します。 エクスポートされたエイリアスは、複数のサブシェル環境に共通に定義されます。 alias は、 エイリアスが定義されていない name が指定された場合以外は、真を戻します。

bg [job ...] 

指定された job をバックグラウンドに移動します。 job を指定しないと、現在のジョブがバックグラウンドに移動します。 job の指定形式については「ジョブ」の項を参照してください。

% break [n] 

このコマンドを囲むような for, while, until または select ループがあれば、その中から抜け出します。 もし n を指定すると、 n レベル分だけループの外に抜け出します。

% continue [n] 

このコマンドを囲んでいる for, while, until または select ループの次の繰り返しの開始に移ります。 n を指定すると、 n レベル上位のループの繰り返しを再開します。

cd [-L|-P] [arg] 

cd old new 

このコマンドには 2 つの形式があります。 第 1 の形式では、現在のディレクトリが arg に変更されます。 arg として - を指定すると、以前のディレクトリにディレクトリが変更されます。 -L オプション (デフォルト) では、シンボリックリンクの処理の際、名称の論理的な関連が記憶されます。したがって、 cd -L .. は、パス構成要素 1 個分だけルートディレクトリに近い方向へ現在のディレクトリを移動させます。一方、 -P オプションでは、シンボリックリンクの処理の際、物理的なパスが記憶されます。したがって、 cd -P .. は、ワーキングディレクトリを現在のディレクトリの親ディレクトリに変更します。 シェルパラメータ HOME はデフォルトの arg になります。 パラメータ PWD には、現在のディレクトリが設定されます。 シェルパラメータ CDPATH は、 arg を含むディレクトリを捜すための検索パスを定義します。 代替ディレクトリ名はコロン (:) で区切ります。 CDPATH がヌルまたは未定義の場合には、デフォルト値は現在のディレクトリになります。 現在のディレクトリはヌルのパス名で指定され、等号の直後、またはパスリスト中の任意の位置の 2 つのコロンデリミタの間に指定することができます。 arg/ で始まる場合には、検索パスは使用されません。 それ以外の場合には、検索パスに指定された各ディレクトリで arg の検索が行われます。 cd(1) を参照してください。

第 2 の形式の cd は、現在のディレクトリの名称 PWD の値の中の文字列 old を、文字列 new に置き換え、この新しいディレクトリへの移動を実行します。

cd コマンドは rksh では実行できません。

echo [arg ...] 

このコマンドの使用法と説明については、 echo(1) を参照してください。

% eval [arg ...] 

引き数をシェルへの入力として読み取り、その結果として生成されたコマンドを実行します。

% exec [arg ...] 

コマンドの実行終了後も、パラメータ割り当てはそのまま有効です。 arg を指定すると、この引き数で指定したコマンドがこのシェルの代わりに実行されます (新しいプロセスは生成されません)。 入出力引き数を指定して、現在のプロセスの設定を変更することもできます。 引き数を指定しない場合には、このコマンドの実行の結果、入出力先変更 (リダイレクト) リストの指定に従ってファイル記述子が変更されます。 この場合、このメカニズムによってオープンされた 3 以上の番号のファイル記述子は、別のプログラムの起動時にすべてクローズされます。

% exit [n] 

n で指定された exit ステータスでシェルを終了させます。 n を省略すると、exit ステータスは、最後に実行されたコマンドの exit ステータスになります。 エンドオブファイルも、 ignoreeof オプションがセットされている場合を除き、シェルを終了させます (後述の 『set』 を参照)。

%% export [name [=value] ...]
  

指定された name に自動エクスポートのマークを設定し、 これ以降に実行されるコマンドの環境に自動的にエクスポートされるようにします。

fc [-eename] [-nlr] [first [last]]
  

fc -e - [old=new] [command]
  

第 1 の形式では、ターミナルに入力された最後の HISTSIZE 個のコマンドの中から、 first から last までの範囲のコマンドが選択されます。引き数