Shellのフリーソフトウェアによる代替としてブライアン・フォックス(英語版)によって作成された[7][8]。Bashは1989年に初めてリリースされ[9]、ほとんどのLinuxディストリビューションやアップルのmacOSにおけるデフォルトのログインシェルとして広く普及している。Linuxでも利用可能である[10]。v3+[6]公式サイトwww.gnu.org/software/bash/テンプレートを表示Bashはコマンドプロセッサであり、通常はアクションを発生させるコマンドをユーザーがタイプするテキストウィンドウで起動する。Bashはスクリプトと呼ばれるファイルからコマンドを読み込んで実行することも可能である。Bashはそれ以外の全てのUnixシェルと同様に、ファイル名のグロブ(ワイルドカードによるマッチング)、パイプ、ヒアドキュメント、コマンド置換(英語版)、変数、そして条件テストや反復(英語版)のための制御構造をサポートする。ShellやKornShellからコピーされている。BashはPOSIX準拠のシェルであるが、数多くの拡張がされている。again(ボーン・アゲイン)(新生)に引っ掛けた駄洒落である[12][13][14][15]。バージョン1.03(1989年8月)以降のBashに存在するシェルショックと呼ばれるセキュリティホールが2014年9月に発見され、すぐにインターネットの至る所で広範囲な攻撃(英語版)の原因となった[16][17][18]。バグの特定後すぐに修正パッチが利用可能となったが、未だに全てのコンピュータが更新されているわけではない。外部リンク歴史編集ブライアン・フォックスは1988年1月10日にBashのコーディングを開始した[19]が、これは彼の前任開発者に進歩が見られなかったことにリチャード・ストールマンが不満を抱くようになってからのことである[7]。BSDやGNUのコードからビルドされた完全にフリーなシステムにとって既存のシェルスクリプトを実行できるフリーなシェルは戦略上非常に重要であると考えていたため、Bashは彼らが自ら創設した数少ないプロジェクトのうちの1つとなり、フォックスはFSFの従業員としてその作業を引き受けた[7][20]。フォックスは1989年6月8日にBashのベータ版であるバージョン.99をリリースし[9]、1992年中頃[21]から彼がFSFから去る[22]1994年中頃[23]の間のある期間まで主要なメンテナであった。Rameyへと移された[24][25][26]。ShellであるLinuxディストリビューションもある)。Windowsにも移植されてCygwinやMinGWの一部として配布されており、DJGPP(英語版)プロジェクトによりDOSにも移植され、NetWareにも移植され、さらに様々な端末エミュレータを通じてAndroidにも移植されている。Chazelas[30]は、プログラム内にセキュリティバグ(英語版)を発見した。CVE-2014-6277[31]およびCVE-2014-7169のナンバーが割り当てられた。Bashを使用したCGIスクリプトで任意コード実行が可能となり攻撃されやすくなるため、シェルショックは深刻なバグとみなされた。シェルショックは、Bashが環境変数を通じてサブシェルに関数定義を渡す方法と関係していた[32]。shellのコマンド構文のスーパーセットである。shellスクリプトのほとんどを修正せずに実行可能である。shellから引用したアイデアが含まれる。ユーザーがインタラクティブコマンドシェルでタブキーを押した場合、Bashは途中までタイプされたプログラム名やファイル名などの様々な名前をマッチさせるコマンドライン補完(英語版)を自動で行う。Bashのコマンドライン補完システムは大変融通が利きカスタマイズ可能であるため、特定のプログラムやタスク用の引数やファイル名を補完する関数とまとめてパッケージングされることが多い。shellにはない拡張が多く存在する。Bashは他のプロセスを生成せずに整数演算ができる。Bashの構文は入出力リダイレクトを単純化する。Bashは<(コマンド)および>(コマンド)構文を使用することにより、プロセス置換(英語版)をサポートする。名前なしパイプにより実装され、名前付きパイプが必要ならば一時的な名前付きパイプにより実装されている)。shellやKornShellの関数宣言構文を受け入れるためPOSIX準拠である。これ以外にも違いがあるため、互換性確保を配慮せず書かれたBashのシェルスクリプトをBourneやKornShellのインタプリタで起動できることは滅多にないが、Linuxが普及するにつれて互換性確保を配慮せずに書くことは少なくなっている。POSIXモードにおいては、Bashはより密接にPOSIXに準拠している[33]。Bashはヒアドキュメントをサポートする。Bashはバージョン2.05bより、<<<演算子を使った「ヒア文字列」から標準入力へのリダイレクトが可能である。Bash3.0ではPerl言語を思い起こさせる構文を使用した、シェル組み込みの正規表現をサポートする[34][35]。Bash4.0では連想配列のサポートが導入された[33][36]。疑似的二次元インデックス配列である'aa'という連想配列を宣言。"1,2")における連想配列の値に"5"を保存。shellから取り入れた機能である[37]。ブレース展開は取り得る組み合わせのセットを生成する。生成された結果はファイルとして存在する必要はない。shellではBashと同じ出力を返さないため、ユーザーは移植するためのシェルスクリプトでブレース展開を使うべきではない。伝統的なシェルはBashと同じ出力を返さない。a{p,c,d,b}e'a{p,c,d,b}eブレース展開がワイルドカードと組み合わされた場合、最初に括弧が展開されてから通常通りワイルドカードが置換される。ワイルドカード処理がなされる。echoだけでもブレース展開が可能で、さらに括弧内の括弧も可能。ブレース展開は取り得る全ての組み合わせだけではなく、連続した範囲に対して適用することも可能である。範囲は2つの整数や文字の間を、2つのドットで区切って指定する。Bashの新しいバージョンでは、範囲の終点を指定する2つ目の整数の後にさらに2つのドットと3つ目の整数を指定することで、範囲の増分を指定することも可能である。expansionが変数展開より先に評価されてしまうため展開に失敗。先に変数展開をして、その結果の文字列に対してのブレース展開を評価。10起動スクリプト編集Bashは起動の際、様々なドットファイル(英語版)のコマンドを実行する。ようなシバンが記述されたBashのシェルスクリプトコマンドと似てはいるものの、実行権限とインタプリタディレクティブのどちらも必要ない。Bashは/bash.bashrcを読み込んで実行してから、(存在する場合)~/.bashrcを読み込んで実行する。オプションを使うことで禁止することができる。コマンドを読み込んで実行するようBashに強制させることができる。Bashは(存在する場合)/etc/profile(ファイル名を/etc/bash.bashrcと改名されることが多い)を読み込み実行する。このファイルを読み込んだ後、~/.bash_profile、~/.bash_login、および~/.profileをこの順番で調べ、存在しかつ読み込めるもののうち最初のものを読み込んで実行する。Bashは(存在する場合)~/.bash_logoutを読み込んで実行する。shellからの派生である。shellユーザーには馴染みのあるいくつかの起動シーケンスを提供する。shellはサブプロセス化されてから継承する環境変数を設定するため、ログイン時に~/.profileを使用する。shellと互換性を保つことが可能となる。shellとの後方互換性を保つことが可能となる。shell由来の関数という機能はエイリアスよりも一般的である。これら2つの機能は通常ログインシェルから継承することはできず、ログインシェルによって生み出されたサブシェル毎に再定義する必要があった。shellとBashではこの問題に直接的を絞ったサブシェル毎の起動ファイルをサポートする。インタラクティブサブシェルのために呼び出される[38]。ファイルをサポートする。このようなタスクにはシステムのロード、ディスクステータス、電子メールが来たかの有無などの表示や、ログイン時間のロギングなどがある。このファイルを模倣できるが、ファイル名は事前に定義されていない。あり、特殊な設定は必要ない。shellと似たセマンティクスを提供する。ディレクトリ配下にBashシステム起動スクリプトが存在するものもある。Bashはこれらのスクリプトを、Bashの通常の初期化の一部として呼び出すが、それ以外の起動ファイルをBash起動シーケンスの記述と異なる順序で読み込むこんでしまう可能性がある。システムが新しいユーザーアカウントに設定を提供するスケルトンファイルのように、ルート・ユーザーのファイル内におけるデフォルトの内容に問題がある可能性もある。Systemの起動スクリプトにより予想外の問題が発生する可能性がある。ファイルを使う場合に発生する可能性が高い。端末などの、ウィンドウマネージャから生み出されたBashシェルウインドウが必要とする環境変数を提供する。standardに非常に良く準拠する[39]。Shellで置き換えた場合を考慮しなければならない。Bash以外のUnixシェルでは適切に動作しないBashコードの部分を指す[40]。キーバインディングを利用して編集するためのコマンドライン用キーボードショートカットを提供するために、Readlineを利用する。viを起動すればViバインディングが利用可能となる[41]。プロセス管理編集Bashにはコマンドに対する実行モードとして、バッチモードと並行実行モードの2つがある。実行するシェルへとすぐに制御が戻される。プロセスはフォアグラウンド状態とバックグラウンド状態だけでなく、停止状態にすることも可能である。プロセスがフォアグラウンドで実行されていれば、これはCtrl+zをタイプすることで行える。コマンド2上記の出力では、括弧内の数はジョブIDを示している。対応するデフォルトプロセスを指し示す。RunningおよびStoppedという表示は、プロセス状態(英語版)を指し示す。最後の文字列はプロセスを開始したコマンドである。プロセスの状態は様々なコマンドを使うことで変更できる。停止されたプロセスをバックグラウンドで実行するよう設定する。最初の引数に処理するプロセスを指定するジョブIDを渡すことができる。出力でプラス記号が付いたデフォルトプロセスに対して処理が行われる。プロセスにシグナルを送って中断するためには、killコマンドを使うことができる。%1条件付き実行編集Bashは先行するコマンドにより設定された終了コードに応じてコマンドを実行する、「条件付き実行」コマンド区切り文字を提供する。"エラーが発生しました。以外を返した)場合のみ実行される。