Set 組込みコマンドはシェルのオプションの設定と位置パラメータの変更を行います。
構文
- 
set [オプション…] [オペランド…]
- 
set -o
- 
set +o
Set コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先に全て指定しなければなりません。最初のオペランドより後にあるコマンドライン引数は全てオペランドとして解釈します。
説明
オプション
オプションが一つ以上与えられている場合、set コマンドはそれらの有効・無効を切り替えます。通常の形式でオプションを与えると、そのオプションは有効になります。オプションの先頭のハイフン (-) の代わりにプラス (+) を付けて指定すると、そのオプションは無効になります。例えば -m や -o monitor や --monitor はシェルのジョブ制御を有効にし、逆に +m や +o monitor や ++monitor はジョブ制御を無効にします。
長いオプションの名前に含まれる英数字以外の文字は無視され、大文字と小文字の区別はありません。例えば --Le-Comp-Debug は --lecompdebug に同じです。また長いオプションの名前の先頭に no を付けることで、オプションの有効・無効を逆転することができます。例えば --noallexport は ++allexport に同じく、また ++nonotify は --notify に同じです。
オプションは以下に挙げる形式で指定することができます:
- 
長いオプション (例: --allexport)
- 
引数としてオプション名を指定した -oオプション (例:-o allexport)
- 
一文字のオプション (例: -a)
ただし全てのオプションが一文字のオプションで指定できるわけではありません。
利用可能なオプションは以下のとおりです:
- 
all-export (-a)
- brace-expand
- 
このオプションはブレース展開を有効にします。 
- case-glob
- 
このオプションが有効な時、パス名展開におけるパターンマッチングは大文字と小文字を区別して行います。このオプションはシェルの起動時に最初から有効になっています。 
- 
clobber (+C)
- 
このオプションを無効にすると、 >演算子によるリダイレクトで既存のファイルを上書きすることはできなくなります。このオプションはシェルの起動時に最初から有効になっています。
- cur-async
- cur-bg
- cur-stop
- 
これらのオプションは現在のジョブの選択の仕方に影響します。(ジョブ ID 参照)。これらのオプションはシェルの起動時に最初から有効になっています。 
- dot-glob
- 
このオプションが有効な時、パス名展開においてファイル名の先頭のピリオドを特別に扱いません。 
- emacs
- 
このオプションは emacs 風行編集を有効にします。 
- 
err-exit (-e)
- 
このオプションが有効な時、実行したパイプラインの終了ステータスが 0 でなければ、シェルは直ちに終了します。ただし、以下の場合を除きます。 - 
そのコマンドが if 文の分岐や while/until 文のループ条件の判定に使われる場合 
- 
パイプラインの先頭に !が付いている場合
 
- 
- 
exec (+n)
- 
このオプションが無効な時、シェルはコマンドの解釈だけを行い、実際にはコマンドを実行しません。このオプションはシェルスクリプトの文法チェックをするのに便利です。このオプションはシェルの起動時に最初から有効になっています。対話モードでは、このオプションに関わらずコマンドは常に実行されます。 
- extended-glob
- 
このオプションはパス名展開における拡張機能を有効にします。 
- 
glob (+f)
- 
このオプションが有効なときはシェルはパス名展開を行います。このオプションはシェルの起動時に最初から有効になっています。 
- 
hash-on-def (-h)
- 
このオプションが有効なとき関数を定義すると、直ちにその関数内で使われる各コマンドの PATH 検索を行いコマンドのパス名を記憶します。 
- hist-space
- 
このオプションが有効な時は空白で始まる行はコマンド履歴に自動的に追加しません。 
- ignore-eof
- 
このオプションが有効な時、対話モードのシェルに EOF (入力の終わり) が入力されてもシェルはそれを無視してコマンドの読み込みを続けます。これにより、誤って Ctrl-D を押してしまってもシェルは終了しなくなります。 
- le-always-rp
- le-comp-debug
- le-conv-meta
- le-no-conv-meta
- le-prompt-sp
- le-visible-bell
- mark-dirs
- 
このオプションが有効な時、パス名展開の展開結果においてディレクトリを表すものの末尾にスラッシュを付けます。 
- 
monitor (-m)
- 
notify (-b)
- 
このオプションが有効な時は、バックグラウンドのジョブの実行状態が変化するとシェルは直ちにそれを標準エラーに報告します。このオプションは notifyle オプションより優先します。 
- notify-le
- 
このオプションは notify オプションとほぼ同じですが、行編集を行っている最中のみジョブの状態変化を報告します。 
- null-glob
- 
このオプションが有効な時、パス名展開でマッチするパス名がないとき元のパターンは残りません。 
- posixly-correct
- 
このオプションは POSIX 準拠モードを有効にします。 
- trace-all
- 
このオプションは、補助コマンド実行中も x-trace オプションを機能させるかどうかを指定します。補助コマンドとは、 COMMAND_NOT_FOUND_HANDLER、PROMPT_COMMAND、およびYASH_AFTER_CD変数の値として定義され、特定のタイミングで解釈・実行されるコマンドです。 このオプションはシェルの起動時に最初から有効になっています。
- 
unset (+u)
- 
このオプションが有効な時、パラメータ展開で存在しない変数を展開するとエラーにはならず空文字列に展開されます。このオプションはシェルの起動時に最初から有効になっています。 
- 
verbose (-v)
- 
このオプションが有効な時、シェルは読み込んだコマンドをそのまま標準エラーに出力します。 
- vi
- 
このオプションは vi 風行編集を有効にします。対話モードが有効で標準入力と標準エラーがともに端末ならばこのオプションはシェルの起動時に自動的に有効になります。 
- 
x-trace (-x)
- 
このオプションが有効な時、コマンドを実行する前に展開の結果を標準エラーに出力します。この出力は、各行頭に PS4変数の値を展開した結果を付けて示されます。 Trace-all オプションも参照してください。
オペランド
Set コマンドにオペランドが与えられている場合またはオプションとオペランドを区切るハイフン二つ (--, コマンドの引数の構文参照) がコマンドライン引数に入っている場合は、現在の位置パラメータは削除され、与えられたオペランドがそれぞれ新しく位置パラメータになります。ハイフン二つが与えられていてかつオペランドがない場合は位置パラメータはなくなります。
終了ステータス
オプションの指定が間違っている場合を除き、set コマンドの終了ステータスは 0 です。
補足
Set コマンドは特殊組込みコマンドです。
POSIX 規格に定義されているオプションは限られています。規格の定義では、
- 
--allexportなどの長いオプションは使えません。
- 
オプション名に noを付けてオプションを無効にすることはできません。
- 
オプション名に大文字や英字でない記号は使えません。 
規格に定義されているオプションは以下のとおりです:
- 
-a,-o allexport
- 
-e,-o errexit
- 
-m,-o monitor
- 
-C,-o noclobber
- 
-n,-o noexec
- 
-f,-o noglob
- 
-b,-o notify
- 
-u,-o nounset
- 
-v,-o verbose
- 
-x,-o xtrace
- 
-h
- 
-o ignoreeof
- 
-o nolog
- 
-o vi