Set 組込みコマンドはシェルのオプションの設定と位置パラメータの変更を行います。
set [オプション] [オペランド]
set -o
set +o
コマンドライン引数を一切与えずに set コマンドを実行すると、現在シェルに設定されている全ての変数の一覧をアルファベット順で (コマンドとして解釈可能な形式で) 標準出力に出力します。-o
を唯一のコマンドライン引数として与えた場合は現在のシェルのオプション設定を一覧にして標準出力に出力します。+o
を唯一のコマンドライン引数として与えた場合も同様ですが、この場合はコマンドとして解釈可能な形式で出力します。これ以外の場合は、set コマンドは以下のようにシェルのオプションの設定と位置パラメータの変更のどちらかまたは両方の動作を行います。
オプションが一つ以上与えられている場合、set コマンドはそれらの有効・無効を切り替えます。通常の形式でオプションを与えると、そのオプションは有効になります。オプションの先頭のハイフン (-
) の代わりにプラス (+
) を付けて指定すると、そのオプションは無効になります。例えば -m
や -o monitor
や --monitor
はシェルのジョブ制御を有効にし、逆に +m
や +o monitor
や ++monitor
はジョブ制御を無効にします。
長いオプションの名前に含まれる英数字以外の文字は無視されます。例えば --le-comp-debug
は --lecompdebug
に同じです。また長いオプションの名前の先頭に no
を付けることで、オプションの有効・無効を逆転することができます。例えば --noallexport
は ++allexport
に同じく、また ++nonotify
は --notify
に同じです。
以下にオプションの一覧を示します。オプションは、--allexport
のように長いオプションとして指定するか、-o allexport
のように一文字のオプション o
の引数として指定することができます (このときオプションの名前に大文字・小文字の区別はありません)。また一部のオプションは -a
のように対応する一文字のオプションで直接指定できます。
-a
は --allexport
と同じです。
-C
は --noclobber
と同じです。
!
が付いている場合を除きます。
-e
は --errexit
と同じです。
-n
は --noexec
と同じです。
-f
は --noglob
と同じです。
-h
は --hashondef
と同じです。
-m
は --monitor
と同じです。
-b
は --notify
と同じです。
-u
は --nounset
と同じです。
-v
は --verbose
と同じです。
PS4
変数の値を展開した結果を付けて示されます。
-x
は --xtrace
と同じです。
Set コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先に全て指定しなければなりません。最初のオペランドより後にあるコマンドライン引数は全てオペランドとして解釈します。
Set コマンドにオペランドが与えられている場合またはオプションとオペランドを区切るハイフン二つ (--
, コマンドの引数の構文参照) がコマンドライン引数に入っている場合は、現在の位置パラメータは削除され、与えられたオペランドがそれぞれ新しく位置パラメータになります。ハイフン二つが与えられていてかつオペランドがない場合は位置パラメータはなくなります。
オプションの指定が間違っている場合を除き、set コマンドの終了ステータスは 0 です。
Set コマンドは特殊組込みコマンドです。
ここに挙げたオプションのうち POSIX に規定されているのは以下のものだけです。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 vi
POSIX ではこのほかに、関数定義をコマンド履歴に登録しないようにする -o nolog
オプションを規定していますが、yash はこれをサポートしていません。