# Yash 更新履歴

## Yash 2.61 (2026-03-03)

  - `configure` スクリプトに `--disable-doc` オプションを追加し、
    マニュアルページのインストールを省略できるようになった
  - `configure` スクリプトに最小限のクロスコンパイル対応を追加した。
    `--host=HOST` オプションでクロスコンパイルのターゲットを指定できる
  - 最適化コンパイラがテストコードを除去することで `configure`
    スクリプトの関数チェックが誤った結果を返すことがあったのを修正。
    関数チェックプログラムのコンパイル時に `-fno-builtin` オプションを
    使用するようになった
  - 精度向上のため、 `times` 組込みコマンドは `getrusage` 関数が
    利用可能な環境ではそれを使用してプロセスの使用時間を取得するように
    なった
  - 初期化スクリプト (yashrc) のサンプルを更新:
    - 履歴ファイルの場所について、 `~/.yash_history` と
      `${XDG_STATE_HOME}/yash/history` が同じファイルを指している場合は
      ファイルの移動を促さないようにした
  - [行編集] `PREFIX` 変数が定義されているときに不明なコマンドの引数を
    補完しようとするとエラーメッセージが表示されるバグを修正
  - [行編集] `mount`, `sv`, `aria2c`, `mkinitcpio`, `7z`, `hdparm` の
    補完を追加

## Yash 2.60 (2025-09-15)

  - 初期化スクリプト (yashrc) のサンプルを更新:
    - WSL で `open` 関数の定義を修正。 `cmd.exe` の代わりに
      `rundll32.exe` を使用して安定性を向上
    - `$EDITOR` よりも `$VISUAL` を `$FCEDIT` のデフォルト値として優先
      するようになった
  - [行編集] "vi-edit-and-accept" 行編集コマンドで `VISUAL` ないし
    `EDITOR` 変数でエディタを選択できるようになった
  - [行編集] `fd`, `dvtm`, `mw` (mutt-wizard), `typst` の補完を追加
  - [行編集] `man` の `-l` (`--local-file`) オプションの補完に対応
  - `export`, `readonly`, `typeset` 組込みで名前がハイフン (`-`) で
    始まる変数や関数を出力する際、オプションと誤って解釈されるのを防ぐ
    ための `--` を出力するようにした。
  - `array` 組込みで配列が更新された後も、シェルが以前の値をエクスポート
    し続けるバグを修正。また、`array` 組込みによって `PATH`, `CDPATH`,
    `YASH_LOADPATH` 変数が変更された際に、内部キャッシュが更新されない
    問題も修正。
  - 二重引用符で囲まれている `${foo+word}`, `${foo-word}`, ${foo=word}`,
    `${foo?word}` の形式のパラメータ展開の `word` に含まれる一重引用符
    (`'`) がクォート文字として扱われていたバグを修正。
  - 二重引用符で囲まれている `${foo+word}`, `${foo-word}`, ${foo=word}`,
    `${foo?word}` の形式のパラメータ展開の `word` でチルダ展開を行わない
    ようにした。

## Yash 2.59 (2025-05-13)

  - POSIX.1-2024 のサポートを強化:
    - 非対話シェルを終了させるようなエラーが対話シェルで発生したとき、
      残りの未実行のコマンドを破棄して直ちに次のコマンドを読むように
      なった。これにはパラメーター展開エラーや変数代入エラーが含まれる
    - 対話シェルでフォアグラウンドのジョブが停止したとき、残りの未実行の
      コマンドを破棄して直ちに次のコマンドを読むようになった
    - ジョブの全ての子プロセスが停止しなくても、どれかの子プロセスが停止
      したときにジョブが停止したとみなすようになった
    - パス名展開でファイル名 `.` と `..` はパターンにマッチしても結果に
      含まれないようになった
    - トラップの中で終了ステータスを指定せずに `exit` 組込みを実行した
      とき、シェルはそのトラップ内で最後に実行したコマンドではなく
      トラップの直前に実行したコマンドの終了ステータスを返すようになった
    - `read` 組込みは結果に応じてより細分化された終了ステータスを返す
      ようになった
    - `read` 組込みに行区切り文字を指定する `-d` オプションを追加
    - POSIX 準拠モードでは `readonly` 組込みは `$LINENO`, `$OLDPWD`,
      `$OPTARG`, `$OPTIND`, `$PWD` 変数を読み取り専用にできないように
      なった
    - POSIX 準拠モードでは `test` (`[`) 組込みで二項演算子 `-a` および
      `-o` ならびに括弧 `(`, `)` を使用できなくなった
    - POSIX 準拠モードで `trap` 組込みに `-p` オプションを使えるように
      なった。 `-p` オプションを使用する場合、設定が変更されていないもの
      も含めて全てのトラップを表示する。
    - `trap` 組込みはシェルが起動された時点で最初から無視されていた
      シグナルも表示するようになった
    - ジョブ制御が有効なとき `wait` 組込みはジョブが停止しても待機し
      続けるようになった。これで、`wait` 組込みはモードに関係なく
      ジョブが終了するまで待機するようになった
    - `true`, `false`, `pwd` を代替組込みコマンドに変更
    - `cd` 組込みに空のディレクトリ名を渡すとエラーになるようになった
    - `$PWD` または `$OLDPWD` が読み取り専用になっていて `cd` 組込みが
      これらの変数を変更できない場合の終了ステータスが 1 になった
    - 対話シェルで、ファイルリダイレクトの対象に対するパス名展開の結果が
      複数のファイル名になる場合、POSIX 準拠モードでないときでもエラーに
      なるようになった
    - シェルの起動時、シェルがコマンドを標準入力から読む設定で、標準入力
      と標準エラーが共に端末である場合、シェルは自動的に対話モードに
      なるようになった。以前は、これに加えてコマンドラインでオペランドが
      指定されてない場合にだけ対話モードになっていた
    - 制御端末がないときでもジョブ制御を有効化できるようになった
    - ジョブ制御が有効なシェルがセッションリーダーと同じプロセスグループ
      で起動された場合、シェルは他の何らかの手段でフォアグラウンドに
      されるまでシェル自体をサスペンドするのではなく、プロセスグループを
      強制的にフォアグラウンドにするようになった
    - コマンドの読み込み時にエラーが発生した場合の終了ステータスを 128
      に変更
    - シェルが終了する際、終了ステータスが最後のコマンドがシグナルに
      よって終了したことを示す値の場合は、シェルは同じシグナルで終了する
      ことによってコマンドの結果を伝搬するようになった
    - 対話シェルが非同期コマンドを開始したとき、ジョブ番号とプロセス ID
      を表示するようになった
    - `printf` 組込みで数値を表すオペランドとして引用符で始まる
      オペランドを指定する場合、引用符の後に文字が二文字以上続く場合は
      エラーになるようになった。例えばこれまで `printf '%d' '"ab'` の
      最後のオペランドに含まれる `b` は無視されていたが、これからは
      エラーになる
    - フィールドがチルダ展開のみからなり、結果が空文字列となる場合、
      フィールドはコマンドラインから削除されないようになった
    - チルダ展開がスラッシュで終わるディレクトリ名を生成し、その展開の
      後にスラッシュが続く場合、ディレクトリ名の末尾のスラッシュを削除
      することでスラッシュの数が正しく維持されるようになった
  - リダイレクト演算子の前に中括弧で囲んだ変数名でファイル記述子を指定
    する構文を、将来の実装のために予約した。この構文は今後は構文エラーと
    なる
  - [行編集] 補完スクリプトを Git 2.48.1 相当に更新
  - [行編集] `git-mv`, `bmake`, `gmake`, `fnf`, `cmus`, `cmus-remote`,
    `catgirl` の補完を追加
  - [行編集] cd と pushd の補完で、補完候補となるディレクトリ名を探す
    際に `$CDPATH` に含まれるディレクトリ名に対してパス名展開を行わない
    ようにした
  - 対話シェルで `read` 組込みが入力を読み込む際にクラッシュすることが
    あったのを修正
  - ジョブ制御が有効なとき、プロセスリダイレクトを実行しているサブシェル
    は `SIGTSTP` シグナルを無視するようになった
  - glibc の fsetpos 関数が正しく動作しないために履歴ファイルが更新
    されない問題に対する回避策を追加
  - サブシェル内で `-m` オプションを有効化するとサブシェル内でもジョブ
    制御が働くという隠し動作を削除

## Yash 2.58.1 (2025-02-04)

  - 初期化スクリプト (yashrc) のサンプルを更新:
    - バージョン 2.58 でデフォルトの `$HISTFILE` の場所を
      `${XDG_STATE_HOME}/yash/history` に変更したが、初期化スクリプトが
      そのディレクトリを作成していなかったため、シェルが履歴ファイルの
      保存に失敗していた。ディレクトリが存在しない場合は作成するように
      修正した。
  - [行編集] バージョン 2.58 で fzy の補完に対応したが、NEWS.ja に
    書き忘れていた
  - root で `tests/job-y.tst` にあるテストを実行すると失敗する問題を
    修正

## Yash 2.58 (2025-02-02)

  - 初期化ファイルの場所を `XDG_CONFIG_HOME` 変数でカスタマイズできる
    ようになった (POSIX 準拠モードを除く)
  - [行編集] Vi 風編集モードのコマンドモードでもコマンドライン推定の
    補完候補を表示するようになった
  - [行編集] fzy と git-restore の補完を追加
  - [行編集] git-merge の --continue オプションの補完を追加
  - [行編集] `.` 組込みコマンドの最初の引数の補完で、スラッシュを入力
    する前からディレクトリ名を補完候補として出すようにした
  - POSIX.1-2024 のサポートを強化:
    - `case` コマンドの分岐を `;;` の代わりに `;&` で区切ることで次の
      分岐も実行させることができるようになった
      - 非標準の拡張として `;|` もしくは `;;&` で区切ることで次の分岐
        からパターンマッチングを再開させることもできる
    - ドル一重引用符に対応した
    - 宣言ユーティリティに対応した。`export`, `local`, `readonly`,
      `typeset` 組込みの引数は、それが変数代入の形式をしているならば
      変数代入と同様のやり方で展開されるようになった
    - `printf` 組込みの変換指定で位置 (値を出力する順序) を指定できる
      ようになった。(例: `printf '%2$s %1$s\n' foo bar`)
    - `cd` および `pushd` 組込みに `-e` オプションを追加
    - `getopts` 組込みのエラー時の終了ステータスは常に 2 になるように
      なった
    - `bg` 組込みでジョブを再開した後は `!` 特殊パラメータはジョブの
      プロセス ID に展開されるようになった
    - POSIX 準拠モードであっても、対話シェルが `exec` 組込みで失敗した
      ときはシェルを終了しないようにした
    - `case` コマンドの分岐の最初のパターンとして `esac` が常に使用
      できるようになった。(例: `case esac in (esac|case) echo ok; esac`)
      以前は POSIX 準拠モードでは構文エラーとなっていた
  - `cd`, `pushd`, `popd` 組込みの終了ステータスがエラーの原因に応じて
    異なる値を返すようになった
  - 入れ子のパラメーター展開で展開エラー発生時にクラッシュする可能性
    があったのを修正
  - 初期化スクリプト (yashrc) のサンプルを更新:
    - デフォルトの `$HISTFILE` を `${XDG_STATE_HOME}/yash/history` に
      変更した。ただし `${HOME}/.yash_history` が存在する場合は警告を
      表示しそちらを使用する。警告を抑止して以前のファイルパスを使い
      続けたい場合は、サンプルの初期化スクリプトが読み込まれる前に
      `$HISTFILE` を設定しておけばよい。
    - エイリアス定義 h='fc -l' および j='jobs' を追加
    - `doas` コマンドのラッパー関数を追加し、端末に紛らわしいウィンドウ
      タイトルが表示されるのを避けるようにした

## Yash 2.57 (2024-08-04)

  - "$POST_PROMPT_COMMAND" に対応。対話モードでコマンドを読むごとに
    変数の値が実行される
  - EXIT トラップ実行中にリダイレクトエラー等でシェルが終了する際、
    EXIT トラップ開始直前の終了ステータスではなくエラーの終了
    ステータスで終了するようにした
  - [行編集] nounset オプション有効時に `git config alias.` に続けて
    補完をしようとするとエラーが出るのを修正
  - [行編集] カーソルがバックスラッシュの直後にある時に補完をすると
    補完する単語に含まれるエスケープが必要な文字に対して
    余計なバックスラッシュが挿入されるのを修正
  - 初期化スクリプト (yashrc) のサンプルを更新:
    - VS Code シェル統合のための設定を追加

## Yash 2.56.1 (2024-03-20)

  - Cygwin で開けるファイル記述子の数を増やした
  - "typeset -fp" で `${foo:/bar/baz}` 形式のパラメータ展開が誤って
    `${foo:/#bar/baz}` と出力されるバグを修正
  - `emacs-capitalize-word` 行編集コマンドの実行時にカーソルの後に
    キャピタライズの対象となる文字がない場合に誤動作してクラッシュする
    こともあるバグを修正
  - `emacs-search-forward-current` および
    `emacs-search-backward-current` 行編集コマンドを追加
  - [行編集] `doas` コマンドの補完スクリプトを追加


======================================================================

 凡例:
   +: 新機能
   -: 廃止機能
   =: 仕様変更
   *: バグ修正
   x: 新たに加わってしまったバグ

----------------------------------------------------------------------
Yash 2.55 (2023-08-20)

  +  行編集: Enter/Send キー ("\et") にデフォルトで Ctrl-M キー
     ("\^M") と同じコマンドを割り当てるようにした
  =  行編集: redraw-all および clear-and-redraw-all コマンドに引数を
     与えることで二つのコマンドの動作を逆にできるようにした
  *  日本語エラーメッセージの誤訳を修正
  .  初期化スクリプト (yashrc) のサンプルを更新:
    +  Ctrl-L を clear-and-redraw-all に割り当てるサンプルコード
  .  補完スクリプトを更新:
    +  git-switch と pass の補完

----------------------------------------------------------------------
Yash 2.54 (2023-02-25)

  +  $PS1P 等の変数でコマンドライン推定の表示フォントスタイルを調整
     できるようにした
  +  --le-trim-right オプション
  =  POSIX 準拠モードでは、POSIX XCU 2.9.1 で動作を規定しないコマンド
     として挙げられている組込みの実行を拒否するようにした。
     準特殊組込みという分類を廃止して必須組込みと任意組込みに分けた。
     "command" と "type" 組込みが表示する組込みの分類を併せて変更。
  =  POSIX で定義されている外部コマンドと同じ働きをする組込みを
     実行するには、POSIX 準拠モードがオフでも、$PATH に対応する外部
     コマンドが存在することを要求するようにした。これに該当する
     組込みは今後は代替組込みと分類する。
  =  "array" 組込みを通常の組込みから拡張組込みに変更。POSIX 準拠
     モードでは完全に存在が無視されるようになった
  =  xtrace オプションは $PS4 を展開する間は再帰的に動作しないように
     なった
  *  allexport オプションが多くの場面で効いていなかった
  *  errexit および errreturn オプションが for ループでの代入エラーに
     効いていなかった
  *  -C オプションが有効な時、存在しないファイルを指すシンボリック
     リンクを ">" リダイレクトで開こうとすると無限ループしていた
  *  $DIRSTACK 変数がエクスポートされているとき、"pushd" および "popd"
     組込みで $DIRSTACK 変数の値が正しく更新されていなかった
  *  "break", "continue", "return" 組込みの終了ステータスが "!" で反転
     されていた
  *  エイリアスの値が空白と行連結で終わる場合に、行連結を取り除くと
     値が空白で終わることから、誤って次のトークンをエイリアス置換の
     対象にしていた
  .  初期化スクリプト (yashrc) のサンプルを更新:
    +  WSL 用の "o" エイリアスを定義

----------------------------------------------------------------------
Yash 2.53 (2022-08-23)

  =  数式展開の結果が未定義動作となるとき確実にエラーとなるようにした
  *  非対話シェルで for ループで代入に失敗したときシェルが終了して
     いなかった
  *  "[[ 単語 =~ 正規表現 ]]" における正規表現にコマンド置換が入って
     いると正常に解析できていなかった
  *  ヒアドキュメントの終端子に閉じられていない引用符が含まれていると
     クラッシュしたり正常に動作しない場合があった
  *  argv なしで yash を起動するとクラッシュしていた

----------------------------------------------------------------------
Yash 2.52 (2021-10-11)

  =  単語の展開時、一つの単語から複数の空文字列の単語に展開される場合
     クォートされていなければ単語を除去するように変更。例えばブレース
     展開 {,} は二つの空文字列ではなく 0 個の単語になる。
  *  単語の展開時、単語が 1 文字の IFS 非空白類のみからなる場合、
     単語を除去するのではなく一つの空文字列の単語に展開するように修正
  *  "typeset -fp" の出力で "<<-FOO" と "<< -FOO" が区別されて
     いなかったのを修正
  *  realloc 関数の呼び出し時に一部の環境でメモリリークする問題を修正
  .  補完スクリプトを更新:
    *  git: 引数をとるオプション ("-C" など) の後の単語が正常に補完
       できない問題を修正

----------------------------------------------------------------------
Yash 2.51 (2020-12-12)

  =  単語の展開でエラーが発生したとき、単語の残りの部分は展開せずに
     直ちに展開を中止するようにした
  =  位置パラメータが一つもないとき、"$@""$@" は 1 個の空文字列では
     なく 0 個の文字列に展開するようにした
  =  数式展開での引用符除去の動作を POSIX の定義に合わせた。今後は
     $(("2" + \5)) のような書き方はエラーとなる
  =  二重引用符内のパラメータ展開の置換用の単語における引用符の扱いを
     他のシェルに合わせた。例えば "${x-\a'b'}" は ab ではなく \a'b' と
     展開されるようになる
  =  コマンド名の単語がない単純コマンドでは、リダイレクトは代入の後に
     サブシェルで実行するようにした
  =  ジョブ制御が無効なシェルでの非同期コマンドの標準入力は、予め
     リダイレクトされている場合でも暗黙的に /dev/null にリダイレクト
     するようにした
  =  "[[ 単語 =~ 正規表現 ]]" における正規表現内でのクォートされた
     文字を Bash と (ほぼ) 同じように扱うようにした
  *  "command" 組込みの -v または -V オプションで外部コマンドのパスを
     出力するとき、現在の作業ディレクトリが / または // だと余計な /
     が出力パスの先頭に付いていた
  *  サブシェルに対するリダイレクトはサブシェルの中ではなく元のシェル
     環境で実行するようにした
  *  リダイレクトされたサブシェルの中で EXIT トラップを実行するとき
     リダイレクトが効いていなかった
  *  ジョブ制御が無効の時、非同期コマンド内で "trap" 組込みで SIGINT
     と SIGQUIT のトラップを変更しても無視されていた
  *  ジョブ制御が無効の時、SIGINT または SIGQUIT にトラップが設定して
     あると非同期コマンド実行時にそれらのシグナルが無視されて
     いなかった
  *  パターンマッチングで、パターン内の展開結果にクォートされていない
     バックスラッシュがあった場合、バックスラッシュ自身をクォートと
     して扱うようにした
  *  位置パラメータが一つもないとき、入れ子のパラメータ展開 "${{@}}"
     は 1 個の空文字列ではなく 0 個の文字列に展開するようにした
  *  "[[ 単語 =~ 正規表現 ]]" における正規表現で括弧と縦棒を
     演算子として使用できるようになった

----------------------------------------------------------------------
Yash 2.50 (2020-05-31)

  *  "-o notify" オプションが有効な時、"fg" 組込みコマンドで再開し終了
     したコマンドのステータスが不必要に出力されていた
  *  terminfo データベースで何らかのキーが空文字列に対応させられて
     いても行編集がフリーズしないようにした
  *  $LINENO を export したとき、外部コマンドに正しい値が渡される
     ようにした
  .  初期化スクリプト (yashrc) のサンプルを更新:
    +  "crontab" コマンドのラッパー関数を追加し、"crontab -e" と打とう
       としたときに誤って "crontab -r" でデータを消してしまうのを防ぐ
       ようにした
  .  補完スクリプトを更新:
    +  git-rebase: Git 2.24.0 までの新しいオプションに対応

----------------------------------------------------------------------
Yash 2.49 (2019-09-22)

  +  --for-local オプション
  =  '--no-unset' オプションが有効な時、パラメータ展開だけでなく
     数式展開でも未定義の変数をエラーにするようにした
  *  位置パラメータが無いとき ""$*, ""$@, $*"", $@"" が空文字列に
     展開されず "$@" の様に扱われていた
  *  環境によっては $RANDOM 変数が 32768 以上の値に展開されることが
     あった
  *  "echo" 組込みコマンドで "\e" エスケープシーケンスが
     動いていなかった
  *  コマンドリストの最後がサブシェルの場合、サブシェルの中で元の
     シェルのジョブをサブシェルのジョブとして扱ってしまっていた
  *  ジョブが削除されるよりも前にプロセス ID が別のプロセスによって
     使い回された場合、新しいジョブの状態が正しく更新されないことが
     あった
  *  "typeset" 組込みコマンドで、コマンド名が予約語になっている
     単純コマンドを含む関数が再解析可能な書式で出力されていなかった
  .  補完スクリプトを更新:
    *  Git remote/fetch/pull/push コマンドの引数の補完でリモートの
       ブランチ名が正しく補完されていなかった。
    *  rsync コマンドの引数の補完でローカルのパス名が正しく補完されて
       いなかった。

----------------------------------------------------------------------
Yash 2.48 (2018-12-22)

  +  二重ブラケットコマンド ([[ ... ]] 構文)
  +  "local" 組込みコマンド
  +  --le-predict-empty オプション
  +  プロンプトを $YASH_PS... 変数で定義できるようにした
  =  コマンドライン推定機能はコマンドを打ち始める前には動作しないのを
     デフォルトにした
  =  $PS1 の初期値を変更
  *  改行を含む数式展開の中で行番号が正しく数えられていなかった
  *  EXIT トラップ内のサブシェルの終了ステータスが誤って元のシェルの
     EXIT トラップ開始前の終了ステータスになっていた
  *  EXIT トラップ内のサブシェルで新たな EXIT トラップを設定しても
     無視されていた
  *  "typeset" 組込みコマンドで、複数のコマンドを含むコマンド置換を
     含むヒアドキュメントを含む関数を表示するときクラッシュしていた
  *  "typeset" 組込みコマンドで、ヒアドキュメントを含むプロセス置換
     (またはプロセスリダイレクト) を含む関数を表示するとき
     ヒアドキュメントの内容が表示されていなかった
  *  for ループの変数名トークンあるいはヒアドキュメント演算子の直後の
     トークンが、値が空白で始まるエイリアス置換の結果である場合に、
     誤って構文エラーになっていた
  *  for ループの "do" がエイリアス置換の対象になっていた
  *  for ループでエイリアス置換により行頭に ";" が来る場合にエラーに
     ならないことがあった
  .  POSIX 準拠モードで、POSIX で認められていない構文をエラーにした
    *  IO_NUMBER トークンをリダイレクトの対象にできないようにした
    *  予約語をリダイレクトの直後に置けないようにした
  .  初期化スクリプト (yashrc) のサンプルを更新:
    =  プロンプトを $YASH_PS... 変数で定義するようにした
    *  より多くの端末で動作するようウィンドウタイトルの設定方法を変更
    *  SIGTSTP, SIGTTIN, SIGTTOU でジョブが確実に停止するように
       シグナルの無視を明示的にキャンセルするようにした
  .  補完スクリプトを更新:
    *  git: 最新の Git でもファイルパスが正しく補完できるようにした
    +  git-grep: Git 2.19.1 までの新しいオプションに対応
    +  git-stash: Git 2.18.0 までの新しいオプションに対応
    +  ping: いくつかの環境で共通のオプションをサポート
    =  ssh, ssh-keygen: OpenSSH 7.7 までの新しいオプションに対応

----------------------------------------------------------------------
Yash 2.47 (2018-04-11)

  +  --errreturn オプション
  =  -x オプションで出力する展開結果に含まれる空白等をクォートする
     ようにした。
  =  エイリアス・変数・キーバインドなどを出力する際の不要な引用符を
     減らした。
  *  "set" 組込みを無引数で実行したときローカル変数しか出力されて
     いなかった。
  *  "." 組込みでファイルを開けなかったとき位置パラメータが元に戻って
     いなかった
  *  -C オプションが有効な時の ">" リダイレクトの信頼性を改善した。
     以前のバージョンではリダイレクトを開く瞬間に他のプロセスがほぼ
     同時にファイルを置き換えた場合に -C オプションが無視されることが
     あった。
  .  初期化スクリプト (yashrc) のサンプルを更新:
    +  "direnv" を有効にするサンプルコード

----------------------------------------------------------------------
Yash 2.46 (2017-10-28)

  =  グローバルエイリアスを複合コマンドの中を含む全ての箇所で置換
     するようにした。
  *  コマンドを常に行単位で実行するようにした。以前は、ファイルや標準
     入力からの読み込みでない場合、コマンドを全て構文解析した後に実行
     していた。
  *  空白で終わる値に置換されるエイリアスの直後では次の単語も
     エイリアス置換の対象となるが、このとき他のシェルと異なり一回しか
     置換が働いていなかった。
  *  空白で終わる値に置換されるエイリアスの直後でグローバルエイリアス
     が二回置換されていた。
  *  行連結があるとエイリアス置換が正しく繰り返されないことがあった。

----------------------------------------------------------------------
Yash 2.45 (2017-07-05)

  +  行編集: 新しいコマンドの追加:
        complete-max-then-list, complete-max-then-next-candidate,
        complete-max-then-prev-candidate
  =  $PS1 および $PS2 のプロンプト内の \j 記法で表示されるジョブの
     個数は、既に終了しかつ終了したことが報告済であるジョブを含まない
     ようになった
  =  "jobs" 組込みを -n オプションで実行したとき、その場で出力されない
     終了済みジョブを消去しないようになった
  *  数式展開で、未定義の変数は正しく 0 に展開されるようになった
  *  "-o notify" オプションが有効でもシェルが SIGCHLD を受信するまで
     ジョブの状態が表示されていなかった
  .  デフォルトの初期化スクリプト (yashrc) を更新:
    +  history -c で履歴を完全削除する前に確認するようになった
  .  補完スクリプトを更新:
    +  carthage: --cache-builds オプション
    *  git: コミットハッシュの候補の数を 10 個までにした

----------------------------------------------------------------------
Yash 2.44 (2017-01-17)

  +  コマンドライン推定と '--le-predict' オプション
  +  ~/.yashrc ファイルが見付からないときはデフォルトの初期化ファイル
     を読み込むようになった
  =  シェルの起動時、$YASH_LOADPATH は環境変数に存在しない場合のみ
     初期化するようになった
  *  補完スクリプトを修正: carthage, git, git-log, git-revert,
     git-submodule, ssh
  *  対話シェルで "." 組込みで読み込んだスクリプトから "return" で戻る
     ことができなかった
  *  "test" 組込みで単項 -o 演算子に "no" を付けたオプション名を指定
     すると結果が逆になっていた ("test -o noclobber" など)
  *  "wait" 組込みでオペランドが一つでも不正な時は必ず終了ステータス
     1 を返すようになった
  *  "in" を用いない for ループで、変数名の直後に改行を置いてその後に
     セミコロンで区切ってもエラーになっていなかった
  =  POSIX.1-2008 Technical Corrigendum 2 (2016) のサポート。
     (*) 印のものを除き、POSIX 準拠モードでの動作にのみ影響します。
    .  パイプラインで "!" の直後に "(" が来る場合は間に空白を入れる
       ことが必須になった
    .  "in" を用いない for ループで、変数名と "do" の間をセミコロンで
       区切れるようになった
    .  一つの単純コマンドで変数に代入しながら関数を実行した時、変数は
       関数実行終了後には残らないようになった (*)
    .  ジョブ制御が無効なときに非同期コマンドの標準入力を暗黙的に
       /dev/null にリダイレクトするようになった。以前は、POSIX 準拠
       モードにおいてはシェルが対話シェルであるときにリダイレクトして
       いた。
    .  非同期リストで SIGINT と SIGQUIT を自動的に無視するのはジョブ
       制御が無効な時だけになった
    .  "bindkey", "complete", "dirs", "disown", "hash", "help",
       "history", "popd", "pushd", "suspend", "type", "typeset",
       "ulimit" は準特殊組込みコマンドになった
    .  "break" および "continue" 組込みコマンドは構文的に取り囲んで
       いるループに対してのみ使用できるようになった (*)
    .  クォートされていない $* および $@ は $IFS が空文字列であっても
       単語分割された状態に展開するようになった (*)
    .  非対話シェルで代入エラーが起きたとき、コマンドの種類によらず
       シェルが終了するようになった (*)
    .  非対話シェルの特殊組込みコマンドでエラーが起きたとき、エラーの
       種類によらずシェルが終了するようになった

----------------------------------------------------------------------
Yash 2.43 (2016-09-22)

  *  補完スクリプトを更新: carthage, cd, su

----------------------------------------------------------------------
Yash 2.42 (2016-08-27)

  +  '--pipefail' オプション
  +  補完スクリプトを追加: carthage, dnf, git-rev-parse, tree, watch
  +  補完スクリプトを更新: cd, git, git-bisect, git-rev-list
     (Git 2.9.2).
  =  POSIX.1-2008 の 2013 年版に準拠
  =  閉じられていないヒアドキュメントを常にエラーにするようになった
  =  ジョブ制御有効なシェルはデフォルトで SIGTTIN と SIGTTOU を
     無視するように
  =  行編集を SIGINT で中断・リセットできるようになった
  =  "-o errexit" オプション有効時は、複合コマンドのリダイレクトエラー
     および for ならびに case コマンドでの展開エラーでもシェルを終了
     するようになった
  *  二重引用符内の `...` によるコマンド置換の中では、バックスラッシュ
     による二重引用符のエスケープはコマンド置換のコマンドが解釈される
     よりも前に解釈されるようにした

----------------------------------------------------------------------
Yash 2.41 (2016-03-20)

  +  '--emptylastfield' オプション
  +  "shift" 組込みの新しいオプション: -A
  +  "shift" 組込みの引数に負数を指定できるようになった
  +  補完スクリプトを追加: git-notes, git-reflog, git-worktree
  =  コマンド名の無い単純コマンドで変数代入がエラーになった時、対話
     シェルでなければすぐにシェルが終了するようになった
  =  For ループが読み取り専用の変数に代入しようとしたときは 0 でない
     終了ステータスを返すようにした
  =  位置パラメータが無いとき """$@" を "$@""" と同様に空の単語に展開
     するようになった
  =  単語分割での空単語の扱いを POSIX の意図に合わせて変更 (分割結果が
     二単語以上で最後の単語が空単語の時、空単語を削除するようになった)
  =  "read" 組込みで最後の値を変数に代入するとき先頭に余分な空白を
     残さないようになった
  =  位置パラメータを連結するとき常に $IFS の最初の文字で区切るように
     なった (以前は $IFS が無視される場合があった)
  *  プロセスリダイレクトの閉じ忘れをエラーとして検出できていなかった
  *  "echo" 組込みで、$ECHO_STYLE 変数が GNU または ZSH のとき、
     単一のハイフンがオペランドとして出力されていなかった
  *  "typeset" 組込みで、引数で指定していない変数への一時代入がある
     場合にクラッシュしていた
  *  "typeset" 組込みで関数を出力する時 -r オプションが無視されていた
  *  "typeset" 組込みで -f と -g オプションの同時使用をエラーと
     するようにした
  *  "fg" および "bg" 組込みにオペランドを指定しなかった場合に
     ジョブ制御対象外のジョブを再開しないようにした
  *  連続した数値のブレース展開で整数が正しく解釈されないことがあった
  *  存在しない履歴番号を "fc" 組込みのオペランドに指定した場合に
     間違った範囲の履歴が処理されていた
  *  "fc" 組込みで "fc -s foo=bar n" 形式の構文が使えていなかった
  *  対話シェルがジョブの状態を報告するときジョブの終了ステータスの
     記録を消してしまっていた
  *  履歴をファイルから読み込む際起こり得る未定義動作を修正
  *  ${foo/bar/baz} 形式のパラメータ展開が POSIX 準拠モードで無効に
     なっていなかった
  *  引用符で囲まれた空の単語が単語分割で誤って削除されていた
  *  パラメータ展開のインデックスでバックスラッシュによるクォートが
     認識されていなかった

----------------------------------------------------------------------
Yash 2.40 (2016-01-09)

  =  "unset" 組込みは "=" を含む変数名をエラーとせず無視するようにした
  =  POSIX 準拠モードでは、閉じられていないヒアドキュメントをエラーと
     するようにした
  *  メモリ確保時にメモリサイズがオーバーフローすると未定義動作に陥る
     可能性があったのを修正
  *  数式展開で浮動小数点数を代入する際にクラッシュしていた
  *  $PATH 内に相対パスがあるとコマンド検索時にメモリリークすることが
     あったのを修正
  *  ${foo##bar*} で削除される文字列が最長マッチになっていなかった
  *  ${foo%%*} が空文字列ではなく ${foo} に展開されてしまっていた
  *  "getopts" 組込みで数字がオプションとして使えなかった
  *  "command" 組込み経由で "." 組込みを実行し、スクリプトファイルが
     見付からない場合、シェルを終了しないようにした
  *  コマンド置換を含むが、コマンドの単語が空に展開される
     単純コマンドの終了ステータスがコマンド置換の終了ステータスに
     なっていなかった
  *  "exec" 組込みでスクリプトファイルが見付からないとききちんと
     終了ステータス 127 で終了するようにした
  *  コマンドの単語を展開する間、パイプが正しく接続されていなかった
  *  "fg" および "bg" 組込みがジョブ名の出力に失敗した時はエラーとする
     ようにした

----------------------------------------------------------------------
Yash 2.39 (2015-08-27)

  +  "read" 組込みの新しいオプション: -e, -P, -p
  +  補完スクリプトを追加: passwd, valgrind
  -  configure の --disable-alias オプション
  =  "read" 組込みで行編集を有効にするには -e (--line-editing)
     オプションを必要とするようにした
  =  "trap" 組込みコマンドの出力が POSIX.1-2013 に準拠するように修正。
     コマンド置換内で実行した場合、サブシェルではなく元のシェルの
     トラップを出力する。
  =  "return" 組込みコマンドが何からリターンすることができるのかに
     ついてマニュアルの記述を明確化し、動作も変更。"eval" および "fc"
     組込みコマンドを "return" で中断できないようにした。
  *  数式展開で "/=" および "%=" 演算子でのゼロ除算でクラッシュ
  *  "complete" 組込みを -D オプション無しで呼んだ時クラッシュ
  *  $HOME が設定されていないときにルートディレクトリから
     初期化スクリプトを探して実行しようとしないように修正
  *  "read" 組込みを引数一つで呼び出したとき単語分割で先頭の IFS
     空白類が残ってしまっていた
  *  "read" 組込みの単語分割で、$IFS にバックスラッシュが含まれている
     場合にバックスラッシュが正しく処理されていなかった
  *  allexport オプションが有効な時でも "read" 組込みで配列に代入する
     ときエクスポートされていなかった
  *  "read" 組込みで行編集を使って入力を待ち受ける間にトラップが実行
     されてしまっていた
  *  "set" 組込みの引数の補完を修正
  *  "git-svn" の補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.38 (2015-06-21)

  +  補完スクリプトを追加: git-rm
  =  POSIX 準拠モードでは関数定義時にポータブルな関数名しか使えない
     ように変更
  *  単語分割で IFS 文字の直後のバックスラッシュが欠ける問題を修正
  *  POSIX 準拠モードでは for ループでポータブルな変数名しか使えない
     ように修正
  *  チルダ展開の後に来る単語の補完を修正
  *  Git の引数の補完で、移動・コピーしたファイルの名前の補完を修正
  *  git-commit で非管理ファイルを補完しないように修正

----------------------------------------------------------------------
Yash 2.37 (2015-01-25)

  +  補完スクリプトを更新:
     git-checkout (Git 2.1.2), git-push (Git 2.0.1), git-submodule
     (Git 2.1.2)

----------------------------------------------------------------------
Yash 2.36 (2014-04-06)

  +  補完スクリプトを追加: git-describe, tig
  +  補完スクリプトを更新: git-branch (Git 1.9.0)

----------------------------------------------------------------------
Yash 2.35 (2013-06-08)

  +  '--traceall' オプション
  +  下記コマンドの補完スクリプトを追加:
     git-clean, git-grep, git-ls-remote, git-submodule,
     git-whatchanged
  +  下記コマンドの補完スクリプトを更新:
     git-cherry-pick, git-rebase (Git 1.8.1.4),
     ssh, ssh-add, ssh-keygen (OpenSSH 6.2)
  =  -e オプションが有効な時にシェルを終了させる条件を POSIX.1-2008
     の 2013 年版に合わせて変更
  =  "++" および "--" 演算子を POSIX 準拠モードで使えなくした
  =  $RANDOM 変数は環境変数を無視して常に乱数を返すようにした
  =  履歴ファイルの中にとても長い行があるときでもそれ以降の履歴を
     無視しないようにした
  =  非常に長いコマンドは履歴ファイルに保存しないようにした
  *  構文エラーメッセージを一部修正
  *  "git" と "ssh" と "rsync" の補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.34 (2013-02-23)

  +  "test" 組込みの演算子追加: =~, -o (単項)
  +  下記コマンドの補完スクリプトを追加:
     configure, git-name-rev, git-request-pull, make, rsync
  =  .yash_profile や .yashrc で構文エラーまたは展開エラーになった時
     対話シェルでなくてもシェルを終了させないようにした
  =  行編集で、上書きした文字をバックスペースで戻せるようになった
  =  行編集で、バックスペースの度に undo 履歴を保存しないようにした
  *  "git" の補完の修正

----------------------------------------------------------------------
Yash 2.33 (2012-10-27)

  =  "help" 組込みの出力を内蔵の説明文に変更
  =  コマンドの構文エラーに関する一部のエラーメッセージを変更
  =  いくつかの組込みコマンドで構文エラーをより厳密にチェックする
     ようになった
  *  "set" 組込みの引数の構文が間違っているとき、POSIX の規定に従い
     シェルを終了させるように修正

----------------------------------------------------------------------
Yash 2.32 (2012-09-22)

  +  Man page および HTML マニュアル (英語および日本語)
  =  "help" 組込みは man page の内容を出力するように変更
  *  "git" の補完の修正

----------------------------------------------------------------------
Yash 2.31 (2012-06-24)

  +  拡張チルダ展開でディレクトリスタックのインデックスの補完に対応
  +  "complete" 組込みに --dirstack-index オプション追加
  +  "svn" バージョン 1.7 の補完に対応
  *  "git", "tar", "su" の補完の修正

----------------------------------------------------------------------
Yash 2.30 (2012-02-04)

  *  リダイレクトのファイル名補完を修正
  +  下記コマンドの補完スクリプトを追加:
     svn, git, gitg, gitk, and gitx.
  *  補完スクリプトの細かい修正

----------------------------------------------------------------------
Yash 2.29 (2011-10-15)

  +  エイリアスの値に改行を入れられるようになった
  *  空の配列を "typeset" 組込みで表示しようとしたときに不正メモリ
     アクセスしていた
  *  関数の中身が (...) の形式の複合コマンドとして定義されているとき
     コマンドを正しくサブシェルで実行するように
  *  行編集で、undo コマンドは編集中の履歴項目でのみ使えるようにした

----------------------------------------------------------------------
Yash 2.28 (2011-08-20)

  =  対話シェルで、メールチェックはジョブ変化の報告の前に行うように
     なった
  *  数式展開で、評価すべからざる式を評価していることがあった
  *  "array" 組込みで、-d オプション使用時に正と負のインデックスを混ぜ
     ると誤った要素を削除していた
  *  実行するコマンドが見付からなかったとき誤って EXIT トラップを実行
     していた
  *  最後のコマンドがリダイレクトされていたとき EXIT トラップもそのリ
     ダイレクトで実行されてしまうことがあった
  *  配列の代入を伴う "exec" 組込みで配列の値を正しく export するよう
     にした
  *  ${#@} が配列の要素の長さの配列に正しく展開されていなかった
  *  整数列へのブレース展開で無限ループすることがあった
  *  "ssh" コマンドの補完で設定ファイルの読み込みを修正
  *  "ln", "mv" コマンドの補完で -T オプションに対応
  *  "trap" 組込みの補完で EXIT の補完に対応

----------------------------------------------------------------------
Yash 2.27 (2011-05-16)

  *  細かいバグ修正
  +  下記コマンドの補完スクリプトを追加:
     awk, chsh, gawk, nawk, pgawk, scp, sftp, ssh-add, ssh-agent,
     ssh-keygen, su, sudo, sudoedit, and useradd.
  *  "set" 組込みと "tar" コマンドの補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.26 (2011-02-17)

  +  "return" 組込みの新しいオプション: -n (--no-return)
  =  英語のエラーメッセージを書き直した
  =  シェルオプションの名前の扱いを一般化した
    .  オプション名の大文字・小文字を区別しなくなった
    .  オプション名に含まれる英数字以外の文字を無視するようにした
    .  オプション名に "no" を付けることで有効・無効を逆転できるように
       した
  =  POSIX 準拠モードでは "case foo in (esac) bar; esac" をエラーに
     するようになった
  =  対話シェルでは noexec オプションを無視するようになった
  =  新着メール通知はメールボックスファイルが空のときは表示しないよう
     にした
  =  "printf %c ''" は "printf %c" と同様に何も出力しなくなった
  =  "complete" 組込みを -A または -R オプション付きで呼び出した場合、
     -f オプションで生成されるファイル名候補についてはディレクトリ名
     部分を除いてパターンマッチングを行うように
  *  '=' を含む関数名を typeset および unset 組込みに指定できるように
     した。(-f オプション指定時)
  *  SIGINT で中断された反復実行の終了ステータスを修正
  +  下記コマンドの補完スクリプトを追加:
     bsdtar, eview, evim, gex, gnutar, gtar, return, rgview, rgvim,
     rview, rvim, slogin, ssh, tar, and which.
  *  下記コマンドの補完スクリプトの修正:
     bash, chmod, dash, less, mksh, set, sh, and umask.

----------------------------------------------------------------------
Yash 2.25 (2010-11-21)

  =  補完候補リストにおいてオプションは大文字小文字区別無くまとめる
     ようにした
  =  補完関数を実行中は $IFS 変数の値をデフォルトに戻すように
  +  下記コマンドの補完スクリプトを追加:
     bash, csplit, dash, diff, ed, egrep, env, ex, expand, fgrep,
     file, find, fold, getconf, grep, gview, gvim, gvimdiff, head,
     iconv, id, join, ksh, less, ln, locale, man, mesg, mkdir, mkfifo,
     mksh, more, mv, newgrp, nice, nl, nohup, od, paste, patch,
     pathchk, pr, ps, renice, rm, rmdir, sed, sh, sort, split, stty,
     tail, tee, time, touch, tr, uname, uniq, vi, view, vim, vimdiff,
     wc, who, xargs, and yash.
  *  下記コマンドの補完スクリプトの修正:
     cat, cd, chgrp, chmod, chown, cmp, comm, cp, crontab, cut, date,
     df, du, exec, ls, and set.

----------------------------------------------------------------------
Yash 2.24 (2010-10-03)

  +  "." 組込みの新しいオプション: -L
  +  "command" 組込みの新しいオプション: -a, -f, -k
  -  "command" 組込みの廃止されたオプション: -B
  =  FreeBSD で全ての種類のシグナルが扱えるように configure を修正
  =  新しい補完メカニズム ("complete" 組込みの動作を変更。補完設定の
     $YASH_LOADPATH からの自動読み込み)
  +  下記コマンドの補完スクリプトを追加:
     basename, bg, cat, chgrp, chmod, chown, cmp, comm, command, cp,
     crontab, cut, date, df, du, export, popd, pushd, readonly, type,
     ".", and "[".
  =  下記コマンドの補完スクリプトを書き直し:
     alias, array, bindkey, break, cd, complete, continue, dirs,
     disown, echo, eval, exec, exit, fc, fg, getopts, hash, help,
     history, jobs, kill, ls, printf, pwd, read, set, suspend, test,
     trap, typeset, ulimit, umask, unalias, unset, and wait.
  -  "return" 組込みの補完スクリプトを削除
  =  補完候補リストで短いオプションが長いオプションの前に来るように
     並び順を変更
  *  存在しないファイルへのシンボリックリンクを正しく補完できるように
  *  補完機能のその他の修正
  *  リダイレクト内のパラメータ展開がエラーになったときに不正メモリ
     アクセスしていた

----------------------------------------------------------------------
Yash 2.23 (2010-07-29)

  *  コマンドライン補完の途中ではトラップを実行しないようにした
     (予期せぬコマンドの実行により表示が乱れるのを防ぐため)
  *  "-o notify" オプションが有効な時、候補生成関数を使用した補完の
     最中にジョブの状態を出力しようとして不正メモリアクセスしていた
  *  "-o verbose" オプションが有効な時でも、補完設定の自動読み込み時は
     読み込んだ内容を出力しないようにした
  *  "kill" 組込みの補完スクリプトを修正

----------------------------------------------------------------------
Yash 2.22 (2010-07-25)

  +  "test" 組込みの演算子追加: -G, -O, -N
  +  $YASH_COMPPATH からの補完設定の自動読み込み
  *  サブシェルが生成された直後にシグナルを受信したとき誤ってそれを
     無視していたのを修正
  *  その他のバグ修正
  +  下記コマンドの補完スクリプトを追加:
     alias, array, bindkey, break, cd, complete, continue, dirs,
     disown, echo, eval, exec, exit, fc, fg, getopts, hash, help,
     history, jobs, kill, ls, printf, pwd, read, return, set, suspend,
     test, trap, typeset, ulimit, umask, unalias, unset, wait.

----------------------------------------------------------------------
Yash 2.21 (2010-06-18)

  +  行編集での補完機能
  =  対話シェルでは、それぞれのコマンドごとに $LINENO を 1 にリセット
     するようにした
  *  "function" キーワードが "command -v" で認識されていなかった
  *  対話シェルが SIGINT を受け取った後の復旧処理を修正
  *  シェルへの入力を扱う関数を書き直し (いくつかのバグ修正含む)

----------------------------------------------------------------------
Yash 2.20 (2010-05-16)

  +  "function" キーワードによる関数の定義
  =  "test" 組込みの "-nt", "-ot" 演算子による比較では存在しない
     ファイルをより古いとみなすようになった (Korn shell に倣う)
  =  行編集: いくつかの編集コマンドの名前を変更
       vi-change-all -> vi-change-line
       vi-yank-and-change-all -> vi-yank-all-change-line
       vi-append-end -> vi-append-to-eol
  *  行編集: clear-and-redraw-all コマンドが正しく動いていなかった

----------------------------------------------------------------------
Yash 2.19 (2010-02-14)

  +  FreeBSD でも "ulimit" 組込みが使えるようになった
  +  メールチェックで、可能ならナノ秒単位でメールファイルをチェック
     するようにした
  +  行編集: 新しいコマンドの追加:
        oldest-history-bol, newest-history-bol, return-history-bol,
        prev-history-bol, next-history-bol,
        beginning-search-forward, beginning-search-backward
  =  ファイル名パターンマッチングを高速化
  =  行編集: 履歴検索中の accept-line コマンドは、検索結果が見つから
     ないときは失敗するようになった
  =  行編集: 以下のコマンドはカーソルを行頭に移動しないようになった
        oldest-history, newest-history, return-history,
        prev-history, next-history
     カーソルを行頭に移動する古い挙動は、名前が "-bol" で終わる
     新しいコマンドによって得られる
  *  配列の代入のトレースの出力がおかしかったのを修正
  *  行編集: vi-edit-and-accept コマンドでカウントを指定できるように
  *  行編集: emacs モードでの search-again-forward/backward コマンドの
     後のカーソル位置を修正

----------------------------------------------------------------------
Yash 2.18 (2009-12-27)

  +  "test" 組込み: 文字列比較演算子追加 (==, ===, !==, <, <=, >, >=)
  +  "test" 組込み: -nt, -ot 演算子で可能ならナノ秒単位でファイルの
     更新日時を比較するように
  +  "cd", "pushd" 組込みに --default-directory オプション追加
  +  "pushd" 組込みに --remove-duplicates オプション追加
  +  右プロンプトとスタイラープロンプト
  +  --le-alwaysrp オプション
  =  $PS1 と $PS2 のフォント変更用エスケープシーケンスの解釈を変更
  =  $PS3 をデフォルトで初期化しないように
  =  $PS4 でも $PS1/$PS2 と同様にエスケープシーケンスを解釈するように
  =  "echo"/"printf" 組込みでナル文字を出力できるように
  *  行編集: $LINES と $COLUMNS が無視される場合があった
  *  行編集: いくつかの端末での文字の色を修正

----------------------------------------------------------------------
Yash 2.17 (2009-12-04)

  +  --le-visiblebell オプション
  +  "test" 組込み: バージョン比較演算子 (-veq, -vne, -vgt, -vge,
     -vlt, -vle)
  +  行編集: "eof" コマンド
  =  "typeset" 組込みをオペランドなしで実行したとき、-g オプションが
     なければローカル変数のみ表示するように
  =  "typeset" 組込みで関数を表示させるときの出力を整形
  =  POSIX 準拠モードでないときは、コマンド置換やコマンドリダイレクト
     の中のコマンドもあらかじめ先に解析しておくようになった
  *  パラメータ展開 "${#}" が構文エラーになっていた
  *  サブシェルで "wait" 組込みを実行すると誤って親プロセスでない
     プロセスを待とうとすることがあった
  *  行編集の vi-replace-char コマンドが壊れていた
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.16 (2009-10-17)

  +  --curbg と --curstop オプション
  =  --curasync オプションはデフォルトでオンに
  =  空の while/until ループの終了ステータスを変更
  =  "return" および "exit" 組込みで 256 以上の終了ステータスを使える
     ように
  =  "echo" 組込みの八進数エスケープは \0 で始まるものしか解釈しない
     ように
  *  非対話シェルで "command" 組込みで特殊組込みを実行したとき構文
     エラーになるとシェルが終了してしまっていたのを修正。
  *  EXIT トラップ設定時のシェルの終了ステータスを修正
  *  "read" と "getopts" 組込みで --allexport オプションが利いて
     いなかった
  *  "getopts" 組込みのセグメンテーションフォルトその他エラー修正
  *  行編集の vi-replace-char コマンドが不正メモリアクセスを
     引き起こすことがあった
  *  行編集の emacs-just-one-space コマンドの結果がおかしかった

----------------------------------------------------------------------
Yash 2.15 (2009-09-07)

  +  対話シェルのコマンドを SIGINT で中断できるように
  +  パス名展開でのブラケット記法に完全に対応した (libc の正規表現の
     実装に依存)
  =  シェルがセッションリーダーのとき "suspend" 組込みでサスペンドする
     には -f オプションを付けないといけないようにした
  =  $YASH_LE_TIMEOUT 変数をデフォルトで設定するのをやめた
  =  ジョブ制御有効なシェルがバックグラウンドで起動されたら停止する
     ように
  =  ジョブ制御有効なシェルはデフォルトでは SIGTTOU を無視しないように
  =  --nocaseglob がオンでも "${var#xxx}" などのパラメータ展開の
     マッチングでは大文字小文字を区別するように
  *  リダイレクトにおけるパス名展開を修正
  *  対話シェル起動時に無視されていたシグナルを "trap" 組込みで
     デフォルトのシグナルハンドラに変更できなかった
  *  組込みコマンドが誤ってシグナルに割り込まれるのを修正
  *  エイリアス置換の後に複合コマンドなどが正しく解析されるよう修正
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.14 (2009-08-07)

  +  "bindkey" 組込みの -l オプション
  +  配列のインデックスに負数を指定できるようになった
  =  "cd /.." の後 $PWD は /.. ではなく / にするように
  =  "command -vb" はキーワード・エイリアス・関数を表示しないように
  =  ほとんどの組込みにおいて、標準出力への書き込みがエラーになったら
     メッセージを吐いて非 0 で終了するようにした
  =  "pwd", "times" 組込みに余計な引数を与えたときエラーにするように
  =  POSIX 準拠モードでないとき特殊組込みでの変数代入がエラーに
     なってもシェルを終了しないように
  *  作業ディレクトリが / のとき "cd //" できなかった
  *  yashrc の中で "bindkey" コマンドを使うと不正メモリアクセスが
     発生していた
  *  $PATH にない通常の組込みコマンドが "command -vb" で検索
     できなかった
  *  "dirs" 組込みに引数を与えたとき無限ループしていた
  *  "ulimit" 組込みが -c, -d オプションを受け付けていなかった
  *  POSIX 準拠モードでは "fg" 組込みは最大一つしか引数を受け付けない
     ように (ヘルプにはそう書いてあったが、実際にはそうなって
     いなかったのを修正)

----------------------------------------------------------------------
Yash 2.13 (2009-07-28)

  +  "history" 組込み
  +  "eval", "break", "continue" 組込みの -i オプション
  +  コマンドが見つからないとき $COMMAND_NOT_FOUND_HANDLER 変数の値を
     実行するように
  -  --autocd オプション
  =  対話シェルで "return" 組込みが関数外で使われた時、終了ステータス
     1 を返すように
  =  コマンドの検索・実行を修正
  *  $PROMPT_COMMAND が設定されているとき、停止中のジョブがあると
     "exit" を二回やってもシェルを終了できなかった
  *  $PROMPT_COMMAND が設定されていると "notifyle" オプションが正しく
     動作していなかった
  *  行編集で redo がうまく動かなくなっていた
  *  行編集でトラップ処理のあとコマンドラインが再描画されていなかった
  *  行編集で vi-edit-and-accept コマンドについていくつかのバグ修正

----------------------------------------------------------------------
Yash 2.12 (2009-07-18)

  +  Emacs 風行編集
  +  "bindkey" 組込み
  +  $PROMPT_COMMAND は配列でもよいように
  +  作業ディレクトリ変更後に $YASH_AFTER_CD を実行するように
  =  "fg", "bg" 組込みは常に SIGCONT を対象ジョブに送信するように
  =  "fg", "bg", "disown", "wait" 組込みの後で "exit" しようとしたとき
     も停止中のジョブに関する警告を出すように
  *  vi 風行編集で、30 回目の yank の後誤ったテキストが put されていた
  *  vi 風行編集で、カーソルが行頭にあると "s" コマンドが使えなかった

----------------------------------------------------------------------
Yash 2.11 (2009-06-22)

  +  "--histspace", "--le-noconvmeta" オプション追加
  +  $HISTRMDUP 変数に対応
  +  $YASH_LE_TIMEOUT 変数に対応
  +  kill 組込みの -l オプションでシグナル名をオペランドとして
     渡せるように
  =  "--le-convmeta" オプションはオンオフ型オプションに
  =  ログインシェルでは "$-" 特殊パラメータに "l" フラグを含めるように
  *  空の case 文 "case i in (*) esac" は常に終了ステータス 0 を返す
     ように
  *  "-f" オプション有効時、クォートされた単語に余計なバックスラッシュ
     がくっついていた
  *  vi 風行編集の v コマンドで不正メモリアクセスしていたのを修正

----------------------------------------------------------------------
Yash 2.10 (2009-05-27)

  +  行編集におけるコマンド履歴検索
  =  内容のない行は履歴に入れないように
  =  vi 風行編集で、"cw" と "cW" が実際の vi と同様に振る舞うように
  *  行編集なしで configure したとき "notifyle" オプションを設定しよう
     とするとセグフォが発生していた
  *  行編集で、編集した履歴をアンドゥしたときカーソル位置が
     正しくなかった
  *  行編集中の不正メモリアクセスのいくつかの修正

----------------------------------------------------------------------
Yash 2.9 (2009-05-10)

  +  対話モードにおける行編集機能
  x  行編集の実装がまだ途中
  +  同じ履歴ファイルを使用する複数のシェルのインスタンス同士で
     履歴を共有するように
  -  "history" 組込みを廃止
  =  非 ASCII なアルファベットも変数名に使えるように
  =  入れ子のパラメータ展開は必ずブレースでくくらないといけないように
  =  "help" 組込みで、指定したコマンドが見つからなければ
     エラーを出すように
  *  数式展開における小数演算が正しくないことがあった
  *  数式展開で下線で始まる識別子がエラーになっていた
  *  "${#" で始まるパラメータ展開の解析を修正 (例: "${#=x}")
  *  "pwd" 組込みのヘルプメッセージを修正

----------------------------------------------------------------------
Yash 2.8 (2009-04-18)

  +  変化量を指定できるブレース展開: {a..b..c}
  +  "command" 組込みで -B, -b オプションが -v, -V オプションと同時に
     使えるようになった
  =  POSIX.1-2008 に準拠
    .  "read" 組込みは入力の末尾の空白類を常に削除するように
    .  チルダ展開の結果を単語分割・パス名展開しないように
    .  "pwd -P" で $PWD 変数を更新しないように
    .  "cd -L foo/.." は、ディレクトリ "foo" が存在しないときエラーに
    .  "command" 組込みで -p オプションが -v, -V オプションと同時に
       使えるようになった
    .  POSIX 準拠モードでは、ジョブ制御中でも非同期コマンドはすべて
       SIGINT と SIGQUIT を無視するように
  *  fc 組込みで編集したコマンドを実行する際、$? 変数に fc で起動した
     エディタの終了ステータスが代入されてしまっていた
  *  $IFS の中にバックスラッシュ、コンマ、またはブレースを入れても
     正しく単語分割できなかった
  *  パス名展開において、ディレクトリの検索権限だけが必要な時でも、
     読み込み権限がなければ展開に失敗していた
  *  シェルが起動するコマンドのシグナルマスクは、シェルのマスクを
     受け継ぐようにした (トラップしたシグナルのマスクを除く)
  *  "autocd" オプション有効時 "command" 組込みにコマンドとして
     ディレクトリ名を与えたときの動作を修正

----------------------------------------------------------------------
Yash 2.7 (2009-03-02)

  +  ${array[index]:=value} で配列要素への代入が可能に
  +  ヒアストリングのための新しいリダイレクト演算子 "<<<"
  +  パイプを開く新しいリダイレクト演算子 ">>|"
  -  ループパイプ機能廃止
  =  シェルの起動時に $IFS 変数を常にデフォルト値で初期化するように
  *  "echo" および "printf" 組込みでエラー時にメッセージを出すように
  *  ファイル名の先頭にあるクォートされたピリオドがファイル名展開で
     正しくマッチしていなかった

----------------------------------------------------------------------
Yash 2.6 (2009-02-11)

  +  fc 組込みに -q オプション追加
  +  複合コマンドの内容は空でもよいように
  *  "alias -p" でハイフンを適切にエスケープするように
  *  POSIX 準拠モードの for 文で、識別子の直後のセミコロンをエラーに
     するように
  *  複合コマンドの直後でグローバルエイリアスが使えなかった
  *  "-o notify" オプションが有効な時 "fg" および "wait" 組込みが
     不正メモリアクセスを引き起こしていた

----------------------------------------------------------------------
Yash 2.5 (2009-01-16)

  =  シェルが使用している FD のリダイレクトはエラーにするように
  *  いくつかのリダイレクト構文エラーを見逃していた
  *  "sig.y" テストが間違っていた
  *  リダイレクト付きの "exec" コマンドがリダイレクト付きの { } 括弧の
     中にある場合、括弧に対するリダイレクトが残ったままになっていた
  *  for 文の識別子の直後のコメントの解析エラーを修正

----------------------------------------------------------------------
Yash 2.4 (2008-12-23)

  =  "jobs" 組込みの -p オプションに対応する長いオプションを
     --pid-only から --pgid-only に変更
  *  SIGCHLD, SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU のトラップが
     誤って無視されることがあった
  *  SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU のシグナルハンドラが
     誤って解除されている瞬間があった
  *  "wait" 組込みがシグナルに割り込まれたときの終了ステータスを修正
  *  ファイルアクセス権限の判定を修正
  *  "command -V xxx/yyy" で "xxx/yyy" が正しいコマンドでないとき
     エラーメッセージを出すように

----------------------------------------------------------------------
Yash 2.3 (2008-12-07)

  =  対話的かつ非 POSIX 準拠モードで動作時、LC_CTYPE の変更が直ちに
     有効になるように
  *  パラメータ展開で空文字列を正しく展開できていなかった
  *  稀にシグナルが無視される競合状態を修正
  *  typeset/readonly/export 組込みで代入を行うとシェル内部のデータが
     正しく更新されていなかった。これにより、PATH を変更した後も古い
     PATH を使い続けてしまうなどの問題があった。

----------------------------------------------------------------------
Yash 2.2 (2008-10-31)

  +  "help", "pushd", "popd", "dirs" 組込み
  =  ルートディレクトリから相対パスで "cd" するとき設定される $PWD
     の値を修正
  *  "." や ".." を含むファイル名展開が正しく動作していなかった

----------------------------------------------------------------------
Yash 2.1 (2008-10-16)

  +  配列変数
  +  "array", "echo", "printf", "test" 組込み
  +  "read" 組込みの -A オプション
  *  "${FOO:-bar}" のようなパラメータ展開の中のコロンフラグが
     パラメータの値が特定の文字で始まる場合に無視されていた
  *  コマンドに対して代入するとき読み取り専用変数でも代入できて
     しまっていた
  *  "unset" 組込みに変数名として "=" を渡すと誤って位置パラメータを
     削除し、場合によっては不正なメモリアクセスを引き起こしていた。
  *  空白のみからなる変数の値のフィールド分割が誤っていた
  *  ファイルアクセス権限の確認は実ユーザ・グループ ID ではなく実効
     ユーザ・グループ ID に基づいて行うように

----------------------------------------------------------------------
Yash 2.0 (2008-09-25)

  +  "history" 組込み
  +  コマンドリダイレクト
  *  POSIX 準拠モードの非対話シェルは特殊組込みの特定のエラーで終了
     するように
  *  エイリアス置換の処理を改良
  *  その他のバグ修正

----------------------------------------------------------------------
Yash 2.0 beta2 (2008-09-11)

  +  コマンド履歴
  +  "type", "hash", "fc" 組込み
  =  "command" 組込みの -V オプションでコマンドがみつからなかった場合
     メッセージを出すように
  *  $PATH に代入しながら外部コマンドを呼出すと不正なメモリアクセスが
     発生していた。
  *  一重引用符が正しく解析されない場合があった。
  *  その他のバグ修正

----------------------------------------------------------------------
Yash 2.0 beta1 (2008-09-06)

  +  "read", "getopts", "command" 組込み
  +  --autocd, --curasync オプション
  +  メールチェック機能
  +  プロンプトコマンド
  =  "readonly", "export" 組込みは常にグローバルに
  *  標準入力をバッファリングしないようにした
  *  "typeset" 組込みで '=' 以外の全ての文字を変数名として受け付ける
     ようにした
  *  特殊パラメータ $? が変数代入内で行われたコマンド置換の終了
     ステータスを反映するように
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.0 beta0 (2008-07-27)

  +  "eval", "exec", ".", "times", "umask", "typeset", "export",
     "readonly", "unset", "shift", "trap" 組込み
  +  "wait" 組込みを中断できるように
  +  数式展開
  +  対話モードでプロセスがシグナルによって終了したらメッセージを
     表示するように
  -  起動時に "/etc/profile" と "~/.profile" は読み込まないように
  *  エイリアス置換でのトークン区切りの認識を修正
  *  値のない代入でのトークン区切りの認識を修正
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.0 alpha2 (2008-07-10)

  +  起動時に /etc/profile や ~/.yashrc を読み込むように
  +  --noprofile, --norcfile, --rcfile オプション
  +  "pwd", "set", "exit", "return", "break", "continue", "jobs",
     "fg", "bg", "wait", "disown", "alias", "unalias" 組込み
  *  --nocaseglob が -c として解釈されていた
  *  --nocaseglob で大文字小文字の認識が不十分だった
  *  ジョブ制御がオフなら、対話シェルでもジョブの状態変化を
     プロンプト前に表示しないようにした
  =  --nounset 有効時、${i?xxx} はエラーとして xxx を返すように
  =  ヘルプの表示を簡潔に

----------------------------------------------------------------------
Yash 2.0 alpha1 (2008-06-14)

  +  オプション追加: -x, -h, -a
  =  POSIX 準拠モードでは 'PS3' のデフォルト値を設定しないように
  +  'configure' に新しい '--no-undefined' オプション追加
  +  ":", "true", "false", "cd" 組込みコマンド
  *  PATH の値が変更されるときコマンド名ハッシュをクリアするように
  *  ナル文字が入力された時のアサーションエラー
  *  その他様々なバグ修正

----------------------------------------------------------------------
Yash 2.0 alpha0 (2.x 版の最初のリリース) (2008-05-26)

  x  数式展開が未実装
  x  組込みコマンドが全く未実装
