sh(1) FreeBSD 一般コマンドマニュアル

sh

前のページ 上に戻る 次のページ

sh




解説

     sh ユーティリティはシステムの標準コマンドインタプリタです。現在 sh は
     IEEE Std 1003.2 (``POSIX.2'') のシェル規約に対応する途上にあります。本バ
     ージョンのシェルは、見方によっては Korn shell と同様に見える機能を多数
     持っていますが、 pdksh(1) のような Korn shell クローンではありません。こ
     のシェルには、POSIX で規定された仕様といくつかの Berkeley 拡張のみが取り
     入れられています。本マニュアルは、shell のチュートリアルではありません
     し、仕様を完全に記述するものでもありません。

   B>概B>要
     シェルは、ファイルまたは端末から 1 行ずつ読み込み、それを解釈し、コマンド
     を実行します。シェルはユーザがシステムにログインしたときに起動されるプロ
     グラムです (ただし、ユーザは chsh(1) コマンドによって他のシェルを選択する
     こともできます)。シェルは、制御構文を持つ言語であり、データ記憶をはじめと
     して多様な機能を提供するマクロ機能、ヒストリ、行編集機能も内蔵していま
     す。このシェルは対話的に使うときに便利な機能を多くとり入れており、対話的
     に用いるときも非対話的に (シェルスクリプトとして) 用いるときも、共通のイ
     ンタプリタ言語を用いることができる利点があります。すなわち、コマンド名を
     シェルに直接タイプすることも、コマンド名をファイルに書いておいてそのファ
     イルをシェルに直接実行させることもできます。

   B>起B>動
     引数が与えられず、かつシェルの標準入力が端末の場合 (または -i フラグが指
     定された場合)、シェルは対話的に動作します。対話的シェルは、通常、コマンド
     入力時にプロンプトを表示し、文法的なエラーとコマンドエラーを異なった方法
     で処理します (後述します)。起動時に、シェルは 0 番目の引数を検査します。
     もしそれがマイナス記号 (-) で始まっているなら、シェルはログインシェルとし
     て動作します。ユーザがシステムにログインした場合は自動的にこの状況になり
     ます。ログインシェルは、まず (以下の各ファイルが存在する場合)、
     /etc/profile と次に .profile ファイルからコマンドを読み込みます。シェル起
     動時に、もしくはログインシェルで .profile を実行中に環境変数 ENV が設定さ
     れているなら、シェルは、その次に環境変数 ENV で示されたファイルからコマン
     ドを読み込みます。つまり、ユーザはログイン時にのみ実行したいコマンドを
     .profile に書き、シェルが起動されるたびに実行したいコマンドを環境変数 ENV
     で示すファイルに書くことになります。環境変数 ENV を設定するには、ホーム
     ディレクトリ下のファイル .profile に以下のように記述します。ここで
     .shinit のかわりに好きな名前を指定することができます。

           ENV=$HOME/.shinit; export ENV

     コマンドライン引数で指定されたオプション以外の最初のものを、シェルはコマ
     ンドを読み込むべきファイル (シェルスクリプト) の名前であると解釈し、それ
     以後の引数はシェルの位置パラメータ ($1, $2, ...) に設定します。それ以外の
     場合、シェルはコマンドを標準入力から読み込みます。

     古いバージョンの sh とは異なり、環境変数 ENV で指定したスクリプトが実行さ
     れるのは、対話的シェルの呼び出し時のみです。これにより、いい加減に書かれ
     た ENV スクリプトに起因する、簡単に食いものにされることが多い有名なセキュ
     リティホールがふさがれたことになります。

   B>引B>数B>リB>スB>トB>処B>理
             けます。

     -b notify
             バックグラウンドジョブ実行の完了を、コマンドが実行中でも即座に報
             告します (未実装です)。

     -C noclobber
             すでに存在するファイルに対して ``>'' リダイレクトにより上書きしま
             せん (未実装です)。

     -E emacs
             組み込みの emacs(1) 風のコマンド行編集機能を有効にします (それ以
             前に -V オプションが指定された場合、それを無効にします)。

     -e errexit
             非対話モードで、テスト状態にないコマンドの実行に失敗した場合、直
             ちにシェルを終了します。コマンドは、if, elif, while, until 構文を
             制御するのに用いられている場合に、テスト状態であるとみなされま
             す。また、 ``&&'' や ``||'' の左辺値として用いられているコマンド
             も、テスト状態とみなされます。

     -f noglob
             パス名展開を行ないません。

     -I ignoreeof
             対話的シェルの場合、入力の EOF を無視します。

     -i interactive
             シェルが対話的に動作するように強制します。

     -m monitor
             ジョブ制御を可能にします (対話的シェルの場合は自動的に設定されま
             す)。

     -n noexec
             非対話的シェルの場合、コマンドを読み込みますが、そのコマンドの実
             行はしません。シェルスクリプトの文法を検査する場合に便利です。

     -p privileged
             特権モードを有効にします。起動時に実効ユーザ ID あるいは実効グル
             ープ ID が、実ユーザ ID や実グループ ID と一致していなければ、こ
             のモードが有効になります。このモードを無効化すると、実効ユーザ ID
             および実効グループ ID は、実ユーザ ID および実グループ ID に設定
             されます。対話的シェルでこのモードが有効になっていると、
             /etc/profile の後で ~/.profile に代わり、 /etc/suid_profile を読
             み込みます。一方、環境変数 ENV の内容は無視されます。

     -s stdin
             コマンドを標準入力から読み込みます (引数でファイル名が指定されて
             いない場合には、このオプションが自動的に設定されます)。シェルが実
             行されてから本オプションを ( set などによって) 設定しても効果はあ
             りません。
             シェルを終了します (未実装です)。

     -V vi   組み込みの vi(1) 風の行編集機能を有効にします (それ以前に -E オプ
             ションが指定されていた場合、それは無効になります)。

     -v verbose
             入力を読み込むごとに標準エラー出力に書き出します。デバッグのとき
             に便利です。

     -x xtrace
             各コマンドを実行する前に、そのコマンドを標準エラー出力に (各コマ
             ンドの前に ``+ '' を付加して) 書き出します。デバッグのときに便利
             です。

     -c オプションは、シェルの入力として解釈させる文字列引数を渡すために使用可
     能です。このオプションは引数として文字列を一つだけ受け取ることに注意して
     下さい。ですから、複数の単語からなる文字列は引用符で囲う必要があります。

     -/+o オプションは、オプションの長い名前のみを引数としてとり、オプションの
     有効化と無効化を行います。例えば、次の 2 つの sh 起動方法では組み込みの
     emacs(1) コマンドラインエディタを有効化します:

           set -E
           set -o emacs

   B>構B>文B>構B>造
     シェルは、ファイルを行単位で読み込み、空白文字 (ブランクおよびタブ) や
     シェルにとって特別な意味を持つ特定の文字列 ( ``演算子'' と呼ばれるもので
     す) を区切りとして、複数の単語に分割します。演算子には、制御演算子とリダ
     イレクト演算子の 2 種類があります (これらの意味については後述します)。以
     下に、それらの一覧を示します。

     制御演算子:
                   &     &&    (     )     \n
                   ;;    ;     |     ||

     リダイレクト演算子:
                   <     >     <<    >>    <>
                   <&    >&    <<-   >|

   B>引B>用 (B>クB>ォB>ーB>ト)
     引用は、特殊な意味を持つ文字や単語 (演算子、空白、キーワードなど) の意味
     を打ち消すために用います。引用には、シングルクォート文字のペアを使う方
     法、ダブルクォート文字のペアを使う方法、バックスラッシュ文字を使う方法の
     3 種類があります。

     シングルクォート文字
             シングルクォートのペアで囲まれた文字は、すべてその文字そのまま (
             リテラル) として扱われます (ただしシングルクォートは別です。シン
             グルクォートで囲った文字列の中にシングルクォートを含めることはで
             きません)。

   B>予B>約B>語
     予約語はシェルにとって特別な意味を持つ単語で、行の先頭または制御演算子の
     直後でのみ予約語として認識されます。以下に予約語の一覧を挙げます。

           !        {        }        case      do
           done     elif     else     esac      fi
           for      if       then     until     while

   B>エB>イB>リB>アB>ス
     エイリアスは、名前とそれと対応する値が対になったもので、組み込みコマンド
     alias によって定義されます。シェルは、予約語が現れる可能性がある場所 (上
     記を参照) で、ある単語に対して、それが予約語かどうかの検査を済ませたの
     ち、それがエイリアスに一致するかどうかを検査します。もし一致したならば、
     入力行の中で、その単語をエイリアスの値に置き換えます。たとえば、 ``lf''
     という名前で ``ls -F'' という値を持つエイリアスが存在したとすると、次の入
     力行

           lf foobar

     は、以下のように置換されます。

           ls -F foobar

     エイリアスは、初心者に対し、引数付きの関数を生成する面倒を求めることな
     く、短いコマンドをつくり出す便利な方法を提供するものです。しかし、構文的
     にあいまいなコードを作り出すことにもつながりかねません。そのような使い方
     はお勧めできません。

   B>コB>マB>ンB>ド
     シェルは、読み込んだ単語を、文法に従って解釈します。本マニュアルでは文法
     については解説しません。 IEEE Std 1003.2 (``POSIX.2'') の BNF 表記を参照
     してください。要するに、行を1行を読み込み、読み込んだ行の最初の単語  (制
     御演算子がある場合は、そのあとの最初の単語) が予約語でない場合、シェルは
     その行を単純コマンドとして解釈します。それ以外の場合、複合コマンドあるい
     は特殊構造であると解釈します。

   B>単B>純B>コB>マB>ンB>ド
     単純コマンドを解釈する場合、シェルは以下のような動作をします。

     1.   単語の前にある ``name=value'' の形式の単語を取り除き、単純コマンドの
          環境に代入します。リダイレクト演算子とその引数 (後述) を取り除き、あ
          とで処理できるように保存します。

     2.   残った単語を、 単語展開の節で説明する方法で展開します。展開後の最初
          の単語をコマンド名とみなし、コマンドの位置を探索します。残りの単語は
          コマンドへの引数とみなされます。処理の結果、コマンド名が残らなかった
          場合、手順 1) で取り出した ``name=value'' の変数代入を、現在のシェル
          の環境に反映します。

     3.   次節で説明する方法で、リダイレクトを行ないます。

   B>リI</I>ダB>イB>レB>クB>ト

           [n]>> file    標準出力 (またはファイル記述子 n) を file に追加しま
                         す。

           [n]< file     標準入力 (またはファイル記述子 n) を file からリダイ
                         レクトします。

           [n]<> file    標準入力 (またはファイル記述子 n) を file から/へ、リ
                         ダイレクトします。

           [n1]<&n2      ファイル記述子 n2 を標準入力 (またはファイル記述子
                         n1) に複製します。

           [n]<&-        標準入力 (またはファイル記述子 n) をクローズします。

           [n1]>&n2      標準出力 (またはファイル記述子 n1) をファイル記述子
                         n2 に複製します。 (訳注: 通常は「ファイル記述子 n2 を
                         標準出力 (またはファイル記述子 n1) に複製」と表現しま
                         す。結果は、標準出力 (または n1 への出力) の n2 への
                         リダイレクトです。)

           [n]>&-        標準出力 (または n) をクローズします。

     以下のリダイレクトは、しばしば ``ヒア・ドキュメント (here-document)'' と
     呼ばれます。

           [n]<< delimiter
                   here-doc-text
                   ...
           delimiter

     シェルは、delimiter までの行を保存し、コマンドへの標準入力またはファイル
     記述子 n にリダイレクトします。最初の行の delimiter が引用 (クォート) さ
     れていた場合、here-doc-text の内容をリテラルとして扱います。そうでない場
     合、パラメータ展開、コマンド置換、数値演算 ( 単語展開の節で説明します) を
     適用します。演算子が ( ``<<'' でなく) ``<<-'' の場合は、 here-doc-text の
     各行の行頭のタブを取り除きます。

   B>コB>マB>ンB>ドB>検B>索B>とB>実B>行
     コマンドには、シェル関数、組み込みコマンド、通常プログラムの 3 種類があ
     り、コマンドを検索する際には、シェルは名前の検索をこの順序で行います。 3
     種類のコマンドは異なる方法で実行されます。

     シェル関数を実行するとき、$0 を除くすべての位置パラメータ ($1, $2,..)  を
     シェル関数への引数として設定します。$0 は変更されません。シェル関数の環境
     として指定された変数 (関数名の直前に ``name=value'' を置いて指定されたも
     の) は、その関数に局所的な変数となり、指定された初期値が設定されます。そ
     して、シェルは関数定義で与えられたコマンドを実行します。コマンドの実行が
     完了すると、位置パラメータを元の値に戻します。これは全て現在のシェルの中
     で処理されます。

     組み込みコマンドは、新たなプロセスを作成せずにシェル内部で実行されます。
     わしい場合がありますので注意して下さい。

   B>パB>スB>検B>索
     コマンドを検索するとき、シェルは、まず、その名前のシェル関数があるかどう
     かを調べます。次に、その名前の組み込みコマンドがあるかどうかを調べます。
     組み込みコマンドでもない場合、以下のいずれかの処理が行われます:

     1.   コマンド名にスラッシュが含まれていれば、検索は行わず、単にそのコマン
          ドが実行されます。

     2.   変数 PATH に含まれる各エントリに対して、順にそのコマンドを検索しま
          す。変数 PATH の値はコロンで区切られたエントリの列でなければなりませ
          ん。各エントリは、それぞれディレクトリ名一つに対応します。カレント
          ディレクトリは、空のディレクトリ名を指定することで暗黙的に、あるいは
          1 個のピリオドを指定することで明示的に指示することができます。

   B>コB>マB>ンB>ドB>のB>終B>了B>スB>テB>ーB>タB>ス
     各コマンドは終了ステータスを持ち、それにより他のシェルコマンドの動作に影
     響を与えることができます。基本的な考え方として、終了ステータス 0 は通常の
     終了または成功を示します。0 以外の終了ステータスは失敗、エラーを意味しま
     す。各コマンドのマニュアルにそれぞれの終了ステータスがどのような意味を持
     つかが記述されているはずです。組み込みコマンドと (実行された) 関数も終了
     ステータスを返します。

     コマンドがシグナルにより終了 (terminate) させられた場合、終了ステータスは
     128 にシグナル番号を加えたものになります。シグナル番号はヘッダファイル
     <sys/signal.h> に定義されています。

   B>複B>合B>コB>マB>ンB>ド (Complex Commands)
     複合コマンドは、単純コマンドの組み合わせで作ります。制御演算子または予約
     語と組み合わせることで、より大きな複合コマンドを生成します。一般に、コマ
     ンドは以下のうちのいずれかです。

           単純コマンド

           パイプライン

           リストまたは合成リスト (compound-list)

           合成コマンド (compound command)

           関数定義

     特に指定のない場合、コマンドの終了ステータスは最後に実行された単純コマン
     ドの終了ステータスとなります。

   B>パB>イB>プB>ラB>イB>ン
     パイプラインは、複数のコマンドを制御演算子 `|' によってつないだものです。
     最後のコマンドを除くすべてのコマンドの標準出力は、次のコマンドの標準入力
     に接続されます。最後のコマンドの標準出力は、通常通り、シェルから受け継が
     れます。

     定を取った値となります。すなわち、最後のコマンドが 0 を返した場合、パイプ
     ラインの終了ステータスは 1 に、最後のコマンドが 0 より大きな値を返した場
     合、終了ステータスは 0 になります。

     パイプラインによる標準入出力の接続はリダイレクトに先立って行われるため、
     パイプラインの接続をリダイレクトによって修正することができます。たとえ
     ば、

           $ command1 2>&1 | command2

     `command1' の標準出力と標準エラー出力の両方を `command2' の標準入力に接続
     します。

     ``;'' または改行文字を終端として用いることにより、直前の AND-OR リスト (
     短絡リスト演算子で後述) を順次実行します。 ``&'' は、直前の AND-OR リスト
     を非同期に実行します。

     注: 他のいくつかのシェルと異なり、 sh ではパイプラインの各プロセスは起動
     した sh の子プロセスとなります。シェルの組み込みコマンドであるときは別で
     す。その場合は現在のシェルで実行されますが、環境に対する操作は影響を与え
     ません。

   B>バB>ッB>クB>グB>ラB>ウB>ンB>ドB>コB>マB>ンB>ド (&)
     コマンドが制御演算子がアンパサンド (&) で終了している場合、シェルはそのコ
     マンドを非同期に実行します。すなわち、シェルはそのコマンドの終了を待たず
     に、次のコマンドの実行を開始します。

     コマンドをバックグラウンドで実行させるための形式は以下のとおりです。

           command1 & [command2 & ...]

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

   B>リB>スB>ト (B>一B>般B>的B>なB>話)
     リストは 0 個またはそれ以上のコマンドを改行文字、セミコロン文字、アンパー
     サント文字 (&) で区切った列です。リストは、これら 3 つの記号のいずれかで
     終了させることもできます。リスト中のコマンドは並べられた順に実行されま
     す。もし、コマンドに続けてアンパーサント文字が置かれている場合、シェルは
     そのコマンドを起動したあと、すぐに次のコマンドの処理を開始します。その他
     の場合、そのコマンドの終了を待ってから次のコマンドの処理を開始します。

   B>短B>絡B>リB>スB>トB>演B>算B>子 (Short-Circuit List Operators)
     ``&&'' と ``||'' は AND-OR リスト演算子です。 ``&&'' は最初のコマンドを実
     行し、もし最初のコマンドの終了ステータスが 0 ならば次のコマンドを実行しま
     す。 ``||'' も同様ですが、最初のコマンドの終了ステータスが 0 でない場合
     に、次のコマンドを実行します。 ``&&'' と ``||'' の優先順位は同じです。

   B>制B>御B>構B>造 (if, while, for, case)
     if コマンドの文法は以下のとおりです。
           if list
           then list

     for コマンドの文法は以下のとおりです。
           for variable in word ...
           do list
           done

     各 word は展開され、変数 variable に word を順に設定しながらリストを繰り
     返し実行します。 dodone は ``{'' と ``}'' で置き換えることができま
     す。

     breakcontinue コマンドの文法は以下のとおりです。
           break [num]
           continue [num]

     break は内側から num 個の for ループまたは while ループを終了します。
     continue は内側から num 個のループの次の繰り返しに制御を移します。これら
     のコマンドは組み込みコマンドとして実装されています。

     case コマンドの文法は以下のとおりです。
           case word in
           pattern) list ;;
           ...
           esac

     pattern は、1 つあるいは複数のパターン (後述の シェルパターンを参照のこ
     と) を ``|'' で接続したものです。

   B>複B>数B>のB>コB>マB>ンB>ドB>のB>グB>ルB>ーB>プB>化
     コマンドは、以下のいずれかの方法によりグループ化することができます。

           (list)

     または、

           { list; }

     最初の形式では、コマンドはサブシェル上で実行されます。この組み込みコマン
     ドは現在のシェルには影響を与えないことに注意してください。 2 つめの形式で
     は新たなシェルを fork しないので、やや効率が良くなります。このようにして
     複数コマンドをグループ化することで、あたかも単一プログラムであるかのよう
     に、それらの出力をまとめてリダイレクトすることができます。

           { echo -n "hello"; echo " world"; } > greeting

   B>関B>数
     関数定義の構文は以下のとおりです。

           name ( ) command

     関数定義は実行可能文の一種です。実行されると、名前 name の関数が定義さ
     れ、終了ステータスとして 0 を返します。command は通常、 ``{'' と ``}'' で
     囲まれたリストです。

     特殊パラメータのうち局所宣言できるのは ``-'' だけです。 ``-'' を局所宣言
     すると、関数内で set コマンドを用いてシェルオプションを変更しても、関数が
     終了するとそれらのオプションは元の値に戻ります。

     return コマンドの文法は以下のとおりです。

           return [exitstatus]

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

   B>変B>数B>とB>パB>ラB>メB>ーB>タ
     シェルはパラメータの集合を管理しています。名前を持つパラメータを変数と呼
     びます。シェルは、起動時にすべての環境変数をシェル変数に取り込みます。新
     たな変数は、次の形式によって設定できます。

           name=value

     ユーザが設定する変数は、アルファベット、数字、アンダスコア (_) のみからな
     る名前を持つ必要があります。また、最初の文字が数字であってはいけません。
     パラメータは、以下に示す数字または特殊記号により参照することもできます。

   B>位B>置B>パB>ラB>メB>ーB>タ
     位置パラメータは、0 より大の数字によって参照されるパラメータです。シェル
     は位置パラメータの初期値としてシェルスクリプト名に続く引数を設定します。
     組み込みコマンド set により再設定や消去ができます。

   B>特B>殊B>パB>ラB>メB>ーB>タ
     特殊パラメータは、以下に挙げる特殊文字のいずれかにより参照されるパラメー
     タです。各パラメータの値の説明を各文字の後ろに示します。

     *       位置パラメータ 1,2,... に展開されます。ダブルクォート文字列内部で
             展開される場合、展開結果は各位置パラメータの間を変数 IFS の先頭の
             文字 ( IFS が設定されていない場合は <空白文字> ) で区切った単一の
             文字列になります。

     @       位置パラメータ 1,2,... に展開されます。ダブルクォート引用の内部で
             展開される場合、各位置パラメータは別々の引数となります。もし、位
             置パラメータが設定されていない場合には、 @ の展開結果は 0 個の引
             数となります (ダブルクォート引用の内部であっても)。すなわち、$1
             が ``abc'' 、$2 が ``def ghi'' であった場合、 "$@" は次の 2 つの
             引数に展開されます。

                   "abc"   "def ghi"

     #       位置パラメータの数に展開されます。

     ?       最後に実行したパイプラインの終了ステータスに展開されます。

     -       (ハイフン) 現在のオプションフラグ (1 文字オプション名をつないだ文
             字列) に展開されます。起動時に指定されたもの、組み込みコマンド

     述べるように、すべての展開がすべての単語に対して適用されるわけではありま
     せん。

     単一の単語に対して適用されたチルダ展開、パラメータ展開、コマンド置換、数
     式展開、クォート削除の結果は単一のフィールドになります。単一の単語が複数
     のフィールドに分割される可能性があるのは、フィールド分割またはパス名展開
     の場合だけです。この規則の唯一の例外は、ダブルクォート中のパラメータ @ の
     展開です (前述)。

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

     1.   チルダ展開、パラメータ展開、コマンド置換、数式展開 (これらはすべて同
          時に行われます)

     2.   変数 IFS の値が空でなければB>A(1) の結果の各フィールドに対してフィー
          ルド分割が行われる

     3.   パス名展開 ( -f オプションが無効の場合)

     4.   クォート削除

     文字 ``$'' はパラメータ展開、コマンド置換、数式評価を行うきっかけになりま
     す。

   B>チB>ルI</I>ダB>展B>開 (B>ユB>ーB>ザB>のB>ホB>ーB>ムB>デB>ィB>レB>クB>トB>リB>名B>へB>のB>置B>換)
     引用されていないチルダ文字 (~) で始まる単語は、チルダ展開の対象になりま
     す。チルダ文字からスラッシュ文字 (/) または単語の終端までのすべての文字が
     ユーザ名とみなされ、そのユーザのホームディレクトリに置換されます。もしユ
     ーザ名が省略された場合 (たとえば ~/foobar)、チルダ文字は変数 HOME の値 (
     現在のユーザのホームディレクトリ) に置換されます。

   B>パB>ラB>メB>ーB>タB>展B>開
     パラメータ展開の形式は以下のとおりです。

           ${expression}

     ここで、expression は対応した ``}'' までのすべての文字です。対応する
     ``}'' を調べる際に、バックスラッシュ文字によりエスケープされたり、クォー
     ト文字に狭まれた ``}'' や、数式展開に埋め込まれている文字や、コマンド置換
     や変数展開中にある文字は調べる対象になりません。

     パラメータ展開の形式のうちもっとも単純なものは以下のとおりです。

           ${parameter}

     そのパラメータに値が存在する場合、その値に置き換えられます。

     パラメータ名やシンボルを中括弧 ({}) で囲んでも構いません。この中括弧は、
     数字 2 文字以上からなる位置パラメータの場合や、パラメータ名の直後にパラメ
     ータ名の一部であるとみなし得る文字が続く場合を除き、省略可能です。ダブル
     クォート引用中のパラメータ展開は以下のようになります。

     ${parameter:=word}
             デフォルト値の代入: パラメータ parameter が設定されていないか空の
             値を持つ場合、word を展開した結果が parameter に代入されます。最
             終的にパラメータ parameter の値に置換されます。位置パラメータや特
             殊パラメータは、この方法で代入することはできません。

     ${parameter:?[word]}
             空か設定されていないときにエラーとする: パラメータ parameter が設
             定されていないか空の値を持つ場合、word を展開した結果 (word が省
             略された場合にはパラメータが設定されていないことを表すデフォルト
             のメッセージ) が標準エラー出力に書き出され、シェルは非 0 の終了ス
             テータスで終了します。それ以外の場合、パラメータ parameter の値に
             置換されます。対話的シェルの場合は必ずしも終了しません。

     ${parameter:+word}
             代替値の使用: パラメータ parameter が設定されていないか空の値を持
             つ場合、空の値に置換されます。さもなければ、word を展開した結果に
             置換されます。

             以上のパラメータ展開において、`:' を用いた場合はパラメータが設定
             されていないかまたは空の値であることが検査され、`:' を省略すると
             パラメータが設定されていないことのみを検査します。

     ${#parameter}
             文字列の長さ: パラメータの値の (文字列としての) 長さに置換されま
             す。

     以下の 4 通りのパラメータ展開は部分文字列切り出し処理を行います。各場合に
     おいて、パターンは正規表現ではなく、パターンマッチ記法 ( シェルパターンの
     項を参照) が用いられます。パラメータが * または @ の場合、展開の結果がど
     うなるかは規定しません (unspecified)。パラメータ展開全体をダブルクォート
     で囲んでもパターンは引用されません。中括弧のなかで引用することによりパタ
     ーンを引用することができます。

     ${parameter%word}
             最短後置パターンの削除: まず word が展開され、その結果をパターン
             として扱います。パラメータ parameter の右から、パターンに一致する
             最短の部分を削除した文字列に置換されます。

     ${parameter%%word}
             最長後置パターンの削除: まず word が展開され、その結果をパターン
             として扱います。パラメータ parameter の右から、パターンに一致する
             最長の部分を削除した文字列に置換されます。

     ${parameter#word}
             最短前置パターンの削除: まず word が展開され、その結果をパターン
             として扱います。パラメータ parameter の左から、パターンに一致する
             最短の部分を削除した文字列に置換されます。

     ${parameter##word}
             最長前置パターンの削除: まず word が展開され、その結果をパターン
             として扱います。パラメータ parameter の左から、パターンに一致する

     で置換します。最後以外の改行は削除しません。ただし、フィールド分割の際
     に、 IFS の値や引用のされかたによっては、ここで残った改行文字が結局は空白
     に置換されることもあります。

   B>数B>式B>展B>開
     数式展開とは、数式を評価し、その値に置換する仕組みです。数式展開の形式は
     以下のとおりです。

           $((expression))

     数式 expression は、その中のダブルクォート文字が特別扱いを受けないという
     点を除いては、ダブルクォート文字で囲まれている文字列と同様に扱われます。
     シェルは expression 中のすべてのトークンにパラメータ展開、コマンド置換、
     クォート削除を適用します。

     次にシェルはその結果を数式として扱い、その値に置換します。

   B>空B>白B>文B>字B>にB>よB>るB>分B>割 (B>フB>ィB>ーB>ルB>ドB>分B>割)
     パラメータ展開、コマンド置換、数式展開のあと、シェルは展開結果を調べて、
     ダブルクォートの外にある部分に対してフィールド分割を適用します。その結
     果、複数のフィールドになる場合もあります。

     シェルは、変数 IFS に設定されている文字それぞれ区切り文字とみなし、パラメ
     ータ展開の結果、およびコマンド置換の結果をフィールドに分割します。

   B>パB>スB>名B>展B>開 (B>フB>ァB>イB>ルB>名B>生B>成)
     -f フラグが設定されていなければ、フィールド分割が行われたあと、ファイル名
     生成が行われます。各単語は、スラッシュで区切られたパターンの列であるとみ
     なされます。パス名展開処理において、単語は、条件を満たすファイルすべての
     ファイル名の列で置換されます。この各ファイル名は、単語の各パターン部分
     を、そのパターンに一致する文字列に置換することで生成されるものです。これ
     には 2 つの制限があります: まず、パターンはスラッシュを含む文字列には一致
     しません。次に、パターンは、そのパターンがピリオドで始まらないかぎり、ピ
     リオドで始まる文字列に一致しません。次節では、パス名展開と case コマンド
     で用いられるパターンについて説明します。

   B>シB>ェB>ルB>パB>タB>ーB>ン
     パターンは、通常の文字とメタキャラクタからなります。通常の文字は、その文
     字そのものに一致します。メタキャラクタは ``!'', ``*'', ``?'', ``['' で
     す。これらの文字を引用すると、各々の特殊な意味を失います。コマンド置換や
     変数置換において、ドル記号やバッククォート文字がダブルクォート文字の中に
     ない場合には、変数の値やコマンドの出力の中に、これらの特殊な文字が存在す
     るかどうかが調べられ、それらがあれば、メタキャラクタとして扱われます。

     アスタリスク文字 (*) は、どのような文字列とも一致します。クエスチョンマー
     ク文字 (?) は、任意の文字 1 文字と一致します。左大括弧 ([) は文字クラスを
     開始します。文字クラスの最後は右大括弧 (]) です。 ``]'' がない場合は、
     ``['' は文字そのものに一致し、文字クラスの開始とは見なされません。文字ク
     ラスは大括弧内に出現するすべての文字に一致します。マイナス記号を用いれ
     ば、文字の範囲を指定することができます。文字クラスの最初にエクスクラメー
     ションマーク (!) を置くことで、文字クラスの意味を反転させることができま
     す。
             ます。そうでなければ、シェルは PATH を使用して、ファイルを検索し
             ます。 PATH を使用しても見付からない場合、カレントディレクトリを
             検索します。

     alias [name ...]

     alias [name=string ...]
             name=string が指定されている場合、シェルは名前 name を持つ値
             string のエイリアスを定義します。単に ``name'' だけが指定された場
             合、エイリアス ``name'' の値が表示されます。引数が指定されない場
             合、 alias は定義されているすべてのエイリアスの名前と値を表示しま
             す ( unalias も参照)。

     bg [job ...]
             指定されたジョブ (指定されなかった場合は現在のジョブ) を、続けて
             バックグラウンドで実行させます。

     command cmd [arg ...]
             指定された組み込みコマンド cmd を実行します。シェル関数を同名の組
             み込みコマンドでオーバライドしたい場合に有用です。

     cd [directory]
             指定されたディレクトリ directory に移動します。 directory 無指定
             時は HOME で指定されるディレクトリに移動します。 directory がカレ
             ントディレクトリのサブディレクトリとして見付からない場合 (かつ
             ``/'', ``./'', ``../'' のいずれでも開始しない場合)、指定された
             directory を CDPATH 変数中のディレクトリリストから検索します。
             CDPATH の形式は PATH と同様です。対話的シェルでは、ユーザが指定し
             たディレクトリと異なる場所に移動した場合、 cd は、移動先のディレ
             クトリ名を表示します。これは、 CDPATH の機構が動作した場合と、シ
             ンボリックリンクを辿った場合に発生します。

     chdir   cd 組み込みコマンドの別名です。

     echo [-en] string
             string の後に改行文字を付けて、標準出力に表示します。

             -n      最後の改行文字を抑制します。

             -e      C 風のバックスラッシュエスケープシーケンスを処理します。
                     echo は次の文字エスケープを理解します:

                     \a      警告 (端末ベルを鳴らす)

                     \b      バックスペース

                     \c      最後の改行文字を抑制します (改行文字が最後の文字
                             でない場合、行が縮んでしまうという副作用がありま
                             す)

                     \e      ESC 文字 (ASCII 0x1b)

                     string がクォートで括られていない場合、シェルからエスケー
                     プするためには、バックスラッシュ自身をバックスラッシュで
                     エスケープする必要があります。例えば次の通りです:

                           $ echo -e "a\vb"
                           a
                            b
                           $ echo -e a\\vb
                           a
                            b
                           $ echo -e "a\\b"
                           a\b
                           $ echo -e a\\\\b
                           a\b

     eval string ...
             指定されたすべての引数を空白で結合し、その結果を解析し直してから
             コマンドとして実行します。

     exec [command [arg ...]]
             commmand が省略されない場合、そのシェルプロセスは指定されたプログ
             ラムに置き換えられます ( command は、シェル組み込みコマンドや関数
             ではない、本物のプログラムでなければなりません)。 exec コマンドに
             おけるリダイレクトは、永久性を持つと見なされ、 exec コマンド完了
             後にも引き続き効力を持ちます。

     exit [exitstatus]
             シェルを終了します。 exitstatus が指定された場合、これはシェルの
             終了ステータスになります。そうでない場合、直前に実行したコマンド
             の終了ステータスがシェルの終了ステータスとなります。

     export name ...
             それ以後にシェルから実行されるコマンドの環境に、指定された名前の
             変数が含まれるようにします (変数のエクスポート)。変数のエクスポー
             トを取り消す唯一の方法は、変数を unset することです。以下のように
             記述することで、エクスポートすると同時に変数の値を設定することが
             できます。

                   export name=value

             引数を指定しない場合、すべてのエクスポートされている名前と値が表
             示されます。

     fc [-e editor] [first [last]]

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

     fc -s [old=new] [first]
             fc 組み込みコマンドは、対話的シェルにそれ以前に入力されたコマンド
             の内容を、表示、編集、再実行します。

             -e editor
             -n      -l で一覧出力する際にコマンド番号を付加しません。

             -r      コマンド一覧時 ( -l オプション指定時) や編集時 ( -l-s
                     も指定されなかった場合) の順序を反転します。

             -s      エディタを起動せずにコマンドを再実行します。

             first

             last    一覧出力や編集の対象となるコマンドを選択します。アクセス
                     可能なコマンドの数は変数 HISTSIZE の値で決まります。
                     first または last 、または両方の値は、以下のいずれかの形
                     式で指定します。

                     [+]num  正の数で、コマンド番号を指定します。コマンド番号
                             は -l オプションで表示させて調べることができま
                             す。

                     -num    負の数は、 num 個だけ現在から遡ったコマンドを指定
                             します。たとえば、 -1 は直前に実行されたコマンド
                             を指定します。

                     string  文字列 string は、過去に実行されたコマンドのう
                             ち、その文字列から始まる最新のものを指定します。
                             もし -s オプションが指定されて old=new が指定され
                             ていなければ、最初のオペランドにイコール記号を含
                             めることはできません。

             fc コマンドの実行にあたり、以下の環境変数の影響を受けます。

             FCEDIT  使用するエディタ名

             HISTSIZE
                     アクセス可能なコマンド数

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

     getopts optstring var
             POSIX に準拠した getopts コマンドです。この getopts コマンドによ
             り、以前の getopt(1) コマンドの必要性は減少しました。最初の引数は
             文字の列です。各文字の後ろにはコロンをつけることができ、そのオプ
             ションが引数をとることを指示します。指定された変数に、解析され見
             つかったオプションが設定されます。見つかったオプションの次の引数
             のインデックスはシェル変数 OPTIND に格納されます。あるオプション
             が引数をとる場合、その引数はシェル変数 OPTARG に置かれます。有効
             でないオプションに出くわすと、変数 var には ``?'' がセットされま
             す。 getopts はオプション群の末尾に到達すると偽の値 (1) を返しま
             す。

     hash [-rv] [command ...]
             省略された場合、現在のジョブに対して処理を行います。

     jobs    バックグラウンドで走行中の、現在のシェルプロセスの子プロセスの一
             覧を出力します。

     pwd     カレントディレクトリのパスを表示します。組み込みコマンド版はカレ
             ントディレクトリ名を覚えており、表示するときに再計算しないので、
             組み込みコマンド版は同名のプログラムとは異なった表示をする場合が
             あります。このため処理は高速ですが、カレントディレクトリの名前を
             変更した場合でも、組み込み版の pwd(1) は以前のディレクトリ名を表
             示し続けます。

     read [-p prompt] [-t timeout] [-er] variable ...
             -p オプションが指定され、かつ標準入力が端末の場合、 prompt をプロ
             ンプトとして表示します。そして標準入力から 1 行入力します。行端の
             改行文字を削除し、行を前述の 空白文字による分割 (フィールド分割)
             の方法に従って分割し、各単語を、valiable... で指定する各変数に順
             に代入します。もし、指定された変数の数より分割された単語の数が多
             ければ、最後の変数に残りの単語すべて ( IFS の文字を区切りにしてそ
             れらも一緒に) が代入されます。分割された単語の数より多くの変数が
             指定されていたなら、余った変数には空文字列が設定されます。

             -r オプションが指定された場合を除き、バックスラッシュは特別に扱わ
             れます。バックスラッシュ文字が改行文字の直前にある場合、バックス
             ラッシュ文字と改行文字は削除されます。その他の文字の直前にバック
             スラッシュがある場合、バックスラッシュは削除され、文字が IFS に含
             まれていても、 IFS の文字でないかのように扱われます。

             -t オプションが指定され、かつ入力がなされる前に timeout が経過す
             ると、 read コマンドは値を割当てずに戻ります。 timeout 値の後には
             オプションで ``s'', ``m'', ``h'' のいずれかの一文字を付けることが
             出来、それぞれ秒・分・時間を陽に指定します。どれも指定しない場合
             には ``s'' であるものとします。

             -e オプションは、古いスクリプトとの後方互換性のためだけにありま
             す。

     readonly name ...
             name で指定された変数を読み出し専用とし、あとで値を変更したり
             unset したりすることができないようにします。以下のように記述する
             ことで、変数を読み出し専用と宣言するのと同時に値を設定することも
             可能です。

                   readonly name=value

             引数が指定されない場合、 readonly コマンドは、読み出し専用になっ
             ている変数の名前の一覧を表示します。

     set [-/+abCEefIimnpTuVvx] [-/+o longname] [-c string] [-- arg ...]
             set コマンドは 3 通りの異なった機能を持ちます。

             引数を指定しなかった場合、短かい形式でも長い ``-/+o longname'' と
             ラメータとして渡された名前を持つ変数に値を代入するためのもので
             す。一般に、 setvar を使うよりも

                   variable=value
             と書くほうが望ましいといえます。)

     shift [n]
             位置パラメータを n 回シフトします。 n を指定しない場合 1 回シフト
             します。 1 回のシフトにより、$2 の値が $1 に、$3 の値が $2 に代入
             されます (以下同様)。また、$# の値は 1 減少します。位置パラメータ
             がない場合、shift は何もしません。

     trap [action] signal ...
             シェルが指定されたシグナル signal を受けとったときに、 action を
             解析し実行するように設定します。シグナルはシグナル番号で指定しま
             す。 action は空文字列にしたり、省略したりすることができます。空
             文字列の場合、指定されたシグナルは無視され、省略した場合は、指定
             したシグナルを受けとったときデフォルトの処理を行ないます。シェル
             がサブシェルを起動するとき、trap で指定された (かつ to explicitly
             specify seconds, minutes or hours.  シェルが起動したときにすでに
             無視されるように設定されていたシグナルに対して trap コマンドを使
             用しても効果はありません。

     type [name ...]
             各 name をコマンドとして解釈し、コマンド検索の結果を出力します。
             出力される結果は以下のものがあります。シェルのキーワード、エイリ
             アス、シェルの組み込みコマンド、コマンド、痕跡つきエイリアス
             (tracked alias)、最後に not found (見つからず) があります。エイリ
             アスについては、エイリアス展開の結果が出力されます。コマンドと痕
             跡つきエイリアスについては、そのコマンドの完全なパス名が印刷され
             ます。

     ulimit [-HSabcdflmnust] [limit]
             リソースのリミット値 (リミット値については getrlimit(2) 参照) を
             設定あるいは表示します。 limit が指定されている場合、指定されたリ
             ソースが設定されます。それ以外の場合、現在のリソース設定値が表示
             されます。

             -H が指定された場合、ハードリミットが設定ないし表示されます。ハー
             ドリミット値を下げることは誰にでもできますが、それを増やすことが
             できるのはスーパユーザだけです。オプション -S を指定した場合はソ
             フトリミットになります。リミット値を表示する場合、 -S-H のい
             ずれか一方だけしか指定できません。デフォルトでは、表示はソフトリ
             ミット、設定はハード/ソフトリミット両方です。

             オプション -a を指定すると ulimit コマンドは全リソースの設定値を
             表示します。この場合、パラメータ limit は指定できません。

             この他のオプションは、表示あるいは設定するリソースの種類を指定す
             るものです。これらは互いに排他的です。

             -b sbsize
                     位。

             -m memoryuse
                     プロセスの常駐セットサイズの最大値。キロバイト単位。

             -n nofiles
                     あるプロセスがオープンできるファイル記述子の最大数。

             -s stacksize
                     スタックセグメントサイズの最大値。キロバイト単位。

             -t time
                     各プロセスで消費できる CPU 時間の最大値。秒単位。

             -u userproc
                     このユーザ ID で同時に走らせうる最大プロセス数。

     umask [mask]
             ファイル作成マスクの値 ( umask(2) を参照) を、 mask で指定された
             8 進数の値に設定します。引数が省略された場合、現在のマスクの値が
             表示されます。

     unalias [-a] [name]
             name が指定された場合、指定された名前のエイリアスを削除します。
             -a オプションが指定された場合、すべてのエイリアスを削除します。

     unset name ...
             指定された変数または関数を unset し、エクスポートされていない状態
             にします。指定された名前の変数も関数も存在する場合、変数と関数の
             両方が unset されます。

     wait [job]
             指定されたジョブ job が終了するのを待ち、ジョブ内の最後のプロセス
             の終了ステータスを返します。引数が省略された場合、すべてのジョブ
             が終了するまで待ち、終了ステータス 0 を返します。

   B>コB>マB>ンB>ドB>行B>編B>集
     sh が端末から対話的に実行されている場合、現在入力中のコマンドおよびコマン
     ド履歴 ( 組み込みコマンドの fc 参照) を vi モードのコマンド行編集機能によ
     り編集することができます。このモードでは、vi のマニュアルに示されているコ
     マンドのサブセットを用います。コマンド ``set -o vi'' (または ``set -V'')
     により vi モードが有効になり、 sh は vi の挿入モードに移行します。 vi モ
     ード中では、挿入モードとコマンドモードの両方を自由に切り替えることが可能
     です。 vi モードは vi と同様であり、 <ESC> キーによりコマンドモードに移行
     し、コマンドモードで <return> キーを叩くことで、行の内容がシェルに渡され
     ます。

     同様に、コマンド ``set -o emacs'' により emacs 風のコマンド行編集機能のサ
     ブセットを使うことができるようになります。


関連項目

     builtin(1), echo(1), expr(1), printf(1), pwd(1), test(1)

ABELNET VPSサービス