Yash は基本的に POSIX.1-2008 のシェルの定義に従って動作しますが、利便性や分かりやすさのために POSIX の規定とは異なる動作をする点もあります。そのため標準状態の yash は POSIX の規定するシェルとして供するには向きません。POSIX 準拠モードを有効にすると、yash はできる限り POSIX の規定通りに動作するようになります。POSIX 準拠シェルとしての互換性が必要な場面では、POSIX 準拠モードを有効にしてください。
シェルの起動時の起動時の名前が sh
ならばシェルは自動的に POSIX 準拠モードになります。また起動時に -o posixlycorrect
オプションが指定されている場合も POSIX 準拠モードになります。また起動後は、set -o posixlycorrect
を実行することで POSIX 準拠モードを有効にできます。
POSIX 準拠モードを有効にすると、yash は POSIX の規定にできるだけ従うようになるだけでなく、POSIX が未定義や未規定と定めている場合のほとんどをエラーにするようになります。すなわち、yash 独自の拡張機能の多くは使えなくなります。具体的には、POSIX 準拠モードを有効にすると以下のような挙動の変化があります。
esac
にすることはできません。
function
を用いる形式の関数定義構文は使えません。
LC_CTYPE
変数の値が変わっても、それをシェルのロケール情報に反映しません。
RANDOM
変数は使えません。
~
と ~ユーザ名
以外の形式の展開が使えません。
$(
と )
で囲んだコマンド置換に含まれるコマンドは、コマンド置換が実行される時に毎回解析されます。
COMMAND_NOT_FOUND_HANDLER
変数の値は実行しません。
PROMPT_COMMAND
変数の値を実行しません。PS1
変数・PS2
変数・PS4
変数の値の解釈の仕方が違います。