Download List

Project Description

Yet another shell (yash) is a POSIX-compliant command line shell, featuring more strict POSIX compliance than those of other shells, as well as powerful command line editing.

So far most of yash's features have been implemented. The author is currently writing auxiliary scripts to make command completion more usable.

System Requirements

System requirement is not defined

Released at 2020-12-12 14:05
yash 2.51 (2 files Hide)

Release Notes

Yet another shell 2.51.

This is a maintenance release.

Yet another shell 2.51.



Yash 2.51

  • Changed: When an expansion error occurs, the shell now immediately stops expansion rather than trying to expand the remaining part of the word.
  • Changed: When there are no positional parameters, "$@""$@" now expands to nothing rather than one empty field, as defined in POSIX.
  • Changed: Quote removal in arithmetic expansion has been modified to match the behavior defined in POSIX. It no longer allows things like $(("2" + \5)).
  • Changed: The quotation rules for the substitution word in a parameter expansion inside double-quotes have been changed to match with the behavior of other existing shells. For example, "${x-\a'b'}" now expands to \a'b' rather than ab.
  • Changed: When there is no command word in a simple command, redirections are now performed in a subshell after assignments are performed.
  • Changed: The standard input of asynchronous commands in a non-job-control shell is now always implicitly redirected to /dev/null, regardless of whether the standard input has already been redirected.
  • Changed: Quoted characters are now handled in (almost) the same way as Bash in the regular expression in the [[ word =~ regex ]] syntax.
  • Fixed: The "command" built-in with the -v or -V option was printing the pathnames of external commands with a redundant leading slash when the current working directory is "/" or "//".
  • Fixed: Redirections on a subshell command are now evaluated in the current shell rather than in the subshell.
  • Fixed: When an EXIT trap is executed in a subshell with a redirection, the redirection was incorrectly not being applied to the trap.
  • Fixed: When job control is off, the "trap" built-in was failing to set a new trap for SIGINT and SIGQUIT in an asynchronous command.
  • Fixed: When job control is off, SIGINT and SIGQUIT were not being ignored if a trap had been set for the signal the main shell process.
  • Fixed: In pattern matching, when an unescaped backslash results from an expansion in the pattern, it is now treated as an escape character.
  • Fixed: When there are no positional parameters, the nested expansion "${{@}}" now expands to nothing rather than one empty field.
  • Fixed: Unquoted parentheses and vertical bars now can be used in the regular expression in the [[ word =~ regex ]] syntax.

Yash 2.51

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