Bash

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Bash
Gnu-bash-logo.svg
Bash screenshot.png
Bashセッションのスクリーンショット
作者 ブライアン・フォックス英語版
初版 1989年6月8日(28年前) (1989-06-08
最新版 4.4.12 / 2017年1月27日(9か月前) (2017-01-27[1]
リポジトリ git.savannah.gnu.org/cgit/bash.git
プログラミング言語 C
対応OS
プラットフォーム GNU
対応言語 多言語 (gettext)
種別 Unixシェルコマンド言語英語版
ライセンス GNU GPL v3+[6]
公式サイト www.gnu.org/software/bash/
テンプレートを表示

BashUnixシェルかつコマンド言語英語版であり、GNUプロジェクトにおけるBourne Shellフリーソフトウェアによる代替としてブライアン・フォックス英語版によって作成された[7][8]。Bashは1989年に初めてリリースされ[9]、ほとんどのLinuxディストリビューションアップルmacOSにおけるデフォルトのログインシェルとして広く普及している。Windows 10におけるWindows Subsystem for Linuxでも利用可能である[10]

Bashはコマンドプロセッサであり、通常はアクションを発生させるコマンドをユーザーがタイプするテキストウィンドウで起動する。Bashはスクリプトと呼ばれるファイルからコマンドを読み込んで実行することも可能である。Bashはそれ以外の全てのUnixシェルと同様に、ファイル名のグロブワイルドカードによるマッチング)、パイプヒアドキュメントコマンド置換英語版変数、そして条件テスト反復英語版のための制御構造をサポートする。Bashのキーワード構文などの言語の基本的要素は全てshからコピーされており、ヒストリなどsh以外の機能はcshkshからコピーされている。BashはPOSIX準拠のシェルであるが、数多くの拡張がされている。

Bashという名前はBourne-again shell頭字語であり、Bashの置換対象であるBourne Shell[11]と、現代アメリカのキリスト教において精神的な再生を意味する "born again"(新生)に引っ掛けた駄洒落である[12][13][14][15]

バージョン1.03(1989年8月)以降のBashに存在するシェルショックと呼ばれるセキュリティホールが2014年9月に発見され、すぐにインターネットの至る所で広範囲な攻撃英語版の原因となった[16][17][18]。バグの特定後すぐに修正パッチが利用可能となったが、未だに全てのコンピュータが更新されているわけではない。

歴史[編集]

ブライアン・フォックスは1988年1月10日にBashのコーディングを開始した[19]が、これは彼の前任開発者に進歩が見られなかったことにリチャード・ストールマンが不満を抱くようになってからのことである[7]。ストールマンとフリーソフトウェア財団 (FSF) は、BSDやGNUのコードからビルドされた完全にフリーなシステムにとって既存のシェルスクリプトを実行できるフリーなシェルは戦略上非常に重要であると考えていたため、Bashは彼らが自ら創設した数少ないプロジェクトのうちの1つとなり、フォックスはFSFの従業員としてその作業を引き受けた[7][20]。フォックスは1989年6月8日にBashのベータ版であるバージョン.99をリリースし[9]、1992年中頃[21]から彼がFSFから去る[22]1994年中頃[23]の間のある期間まで主要なメンテナであった。フォックスが去った後、彼の責務はもう一人の初期貢献者であるChet Rameyへと移された[24][25][26]

それ以降BashはLinuxユーザーの間で最も有名なシェルとなり、様々なLinuxディストリビューションやアップルのmacOSにおけるデフォルトインタラクティブシェルとなっている[27][28][29](ただしデフォルトのスクリプトシェルがAlmquist shell英語版であるLinuxディストリビューションもある)。BashはMicrosoft Windowsにも移植されてCygwinMinGWの一部として配布されており、DJGPP英語版プロジェクトによりDOSにも移植され、NetWareにも移植され、さらに様々な端末エミュレータを通じてAndroidにも移植されている。

2014年9月、UNIX/Linux・ネットワーク・テレコム専門家でありイギリスで働いているStéphane Chazelas[30]は、プログラム内にセキュリティバグ英語版を発見した。このバグは最初9月24日に公開されてシェルショックと命名され、CVE-2014-6271, CVE-2014-6277[31]およびCVE-2014-7169のナンバーが割り当てられた。Bashを使用したCGIスクリプトで任意コード実行英語版が可能となり攻撃されやすくなるため、シェルショックは深刻なバグとみなされた。シェルショックは、Bashが環境変数を通じてサブシェルに関数定義を渡す方法と関係していた[32]

機能[編集]

Bashのコマンド構文は、Bourne Shellのコマンド構文のスーパーセットである。構文の前処理においてBashと異なって解釈される振る舞いに偶然遭遇してしまったり、新しくBashに組み込まれたコマンドと同じ名前のシステムコマンドを起動しようとするBourne Shellスクリプトを除いて、Bashは大量に存在するBourne Shellスクリプトのほとんどを修正せずに実行可能である。Bashのコマンド構文には、コマンドライン編集、コマンド履歴英語版、ディレクトリスタック、$RANDOM$PPID変数、およびPOSIXのコマンド置換英語版構文である$(…)など、KornShell (ksh) やC Shell (csh) から引用したアイデアが含まれる。

ユーザーがインタラクティブコマンドシェルでタブキーを押した場合、Bashは途中までタイプされたプログラム名やファイル名などの様々な名前をマッチさせるコマンドライン補完英語版を自動で行う。Bashのコマンドライン補完システムは大変融通が利きカスタマイズ可能であるため、特定のプログラムやタスク用の引数やファイル名を補完する関数とまとめてパッケージングされることが多い。

Bashの構文には、Bourne Shellにはない拡張が多く存在する。Bashは他のプロセスを生成せずに整数演算 ("arithmetic evaluation") を行うことができる。この演算のためにBashは((…))コマンドと$((…))変数構文を利用する。Bashの構文は入出力リダイレクトを単純化する。例えば、Bashでは&>演算子を使用することで、標準出力 (stdout) と標準エラー出力 (stderr) を同時にリダイレクトすることができ、Bourne Shellにおいてこれに相当するコマンドである'command > file 2>&1'よりも簡単にタイプできる。Bashは<(command)および>(command)構文を使用することにより、プロセス置換英語版をサポートする。この構文は、通常のリダイレクトではファイル名が記述される箇所にあるcommandの出力(または入力)を引数の代用とする(これは名前なしパイプをサポートするシステムならば/proc/fd/の名前なしパイプにより実装され、名前付きパイプが必要ならば一時的な名前付きパイプにより実装されている)。

'function'キーワードを使用する場合、Bashの関数宣言はBourne/Korn/POSIXスクリプトと互換性がない(KornShellでも'function'を使用する場合に同様の問題が起こる)が、BashはBourneやKornの関数宣言構文を受け入れるためPOSIX準拠である。これ以外にも違いがあるため、互換性確保を配慮せず書かれたBashのシェルスクリプトをBourneやKornShellのインタプリタで起動できることは滅多にないが、Linuxが普及するにつれて互換性確保を配慮せずに書くことは少なくなっている。ただしPOSIXモードにおいては、Bashはより密接にPOSIXに準拠している[33]

Bashはヒアドキュメントをサポートする。Bashはバージョン2.05bより、<<<演算子を使った「ヒア文字列」から標準入力 (stdin) へのリダイレクトが可能である。

Bash 3.0ではPerlを思い起こさせる構文を使用した、インプロセスの正規表現をサポートする[34][35]

Bash 4.0では連想配列のサポートが導入された[33][36]。連想配列により、AWKと類似の方法で多次元配列を疑似的にサポート可能となる:

$ declare -a aa        # 疑似的二次元インデックス配列である'aa'という連想配列を宣言。
$ i=1; j=2             # インデックス初期化。
$ aa[$i,$j]=5          # キー "$i,$j"(つまり "1,2")における連想配列の値に"5"を保存。
$ echo ${aa[$i,$j]}    # キー "$i,$j" に保存された値を出力。
5

Brace expansion[編集]

Brace expansionはAlternationとも呼ばれ、C Shellからコピーされた機能である。Brace expansionは取り得る組み合わせのセットを生成する。生成された結果はファイルとして存在する必要はない。展開された各文字列結果はソートされておらず、保存された順に左から右へと並んでいる:

$ echo a{p,c,d,b}e
ape ace ade abe
$ echo {a,b,c}{d,e,f}
ad ae af bd be bf cd ce cf

Bourne ShellではBashと同じ出力を返さないため、ユーザーは移植するためのシェルスクリプトでBrace expansionを使うべきではない。

$ # 伝統的なシェルはBashと同じ出力を返さない。
$ /bin/sh -c 'echo a{p,c,d,b}e'
a{p,c,d,b}e

Brace expansionがワイルドカードと組み合わされた場合、最初に括弧が展開されてから通常通りワイルドカードが置換される。したがって、カレントディレクトリにあるJPEGとPNGイメージを獲得するには以下のようにする:

ls *.{jpg,jpeg,png}    # *.jpg *.jpeg *.pngが展開されてから
                       # ワイルドカード処理がなされる。
echo *.{png,jp{e,}g}   # echoだけでもBrace expansionが可能で、さらに括弧内の括弧も可能。

Brace expansionは取り得る全ての組み合わせだけではなく、連続した範囲に対して適用することも可能である。範囲は2つの整数や文字の間を、2つのドットで区切って指定する。Bashの新しいバージョンでは、範囲の終点を指定する2つ目の整数の後にさらに2つのドットと3つ目の整数を指定することで、範囲の増分を指定することも可能である。

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo file{1..4}.txt
file1.txt file2.txt file3.txt file4.txt
$ echo {a..e}
a b c d e
$ echo {1..10..3}
1 4 7 10
$ echo {a..j..3}
a d g j

Brace expansionを変数展開と組み合わせると、Brace expansionの後で変数展開が行われてしまうため、場合によってはevalビルドインが必要になる可能性もある:

$ start=1; end=10
$ echo {$start..$end}  # Brace expansionが変数展開より先に評価されてしまうため展開に失敗。
{1..10}
$ eval echo {$start..$end} # 先に変数展開をして、その結果の文字列に対してのBrace expansionを評価。
1 2 3 4 5 6 7 8 9 10

起動スクリプト[編集]

Bashは起動の際、様々なドットファイル英語版のコマンドを実行する。Bashが使用する初期化ファイルは、実行権限が与えられてかつ#!/bin/bashのようなインタプリタディレクティブ英語版が記述されたBashのシェルスクリプトコマンドと似てはいるものの、実行権限とインタプリタディレクティブのどちらも必要ない。

起動ファイルの実行順序[編集]

インタラクティブログインシェルとして起動された場合[編集]

Bashは(存在する場合)/etc/profile(ファイル名を/etc/bash.bashrcと改名されることが多い)を読み込み実行する。

このファイルを読み込んだ後、~/.bash_profile~/.bash_login、および~/.profileこの順番で調べ、存在しかつ読み込めるもののうち最初のものを読み込んで実行する。

ログインシェルを終了した場合[編集]

Bashは(存在する場合)~/.bash_logoutを読み込んで実行する。

(ログインシェルではない)インタラクティブシェルとして起動された場合[編集]

Bashは/bash.bashrcを読み込んで実行してから、(存在する場合)~/.bashrcを読み込んで実行する。これは--norcオプションを使うことで禁止することができる。--rcfile fileオプションにより、~/.bashrcの代わりにfileからコマンドを読み込んで実行するようBashに強制させることができる。

Bourne Shellやcshの起動シーケンスとの比較[編集]

Bashの各要素はBourne Shellcshからの派生である。このため、制限付きながら起動ファイルをBourne Shellと共用でき、さらにcshユーザーには馴染みのあるいくつかの起動シーケンスを提供する。

継承可能な環境変数の設定[編集]

Bourne Shellはサブプロセス化されてから継承する環境変数を設定するため、ログイン時に~/.profileを使用する。Bashでも、Bash固有の~/.bash_profile~/.bash_loginに以下の行を記述して、それらから明示的に~/.profileを実行することでBourne Shellと互換性を保つことが可能となる。Bash固有の構文を~/.profileに記述しないことで、Bourne Shellとの後方互換性を保つことが可能となる。

. ~/.profile
エイリアスと関数[編集]

csh由来のエイリアスという機能が存在するが、その大部分を置き換えるBourne Shell由来の関数という機能はエイリアスよりも一般的である。これら2つの機能は通常ログインシェルから継承することはできず、ログインシェルによって生み出されたサブシェル毎に再定義する必要があった。この問題の対処に利用可能なENV環境変数が存在するが、cshとBashではこの問題に直接的を絞ったサブシェル毎の起動ファイルをサポートする。Bashでは~/.bashrcがインタラクティブサブシェルのために呼び出される。~/.bashrcにあるユーザー定義関数がログインシェルでも必要な場合、以下の行を~/.bash_loginへ必要な環境変数の設定後に記述する:

. ~/.bashrc
ログイン時のみやログアウト時のみに実行するコマンド[編集]

cshは最初のログイン時のみに実行されるタスクのための~/.loginファイルをサポートする。このようなタスクにはシステムのロード、ディスクステータス、電子メールが来たかの有無などの表示や、ログイン時間のロギングなどがある。Bourne Shellは~/.profileでこのファイルをエミュレートできるが、ファイル名は事前に定義されていない。cshモデルに似たセマンティクスを実現するため、~/.bash_profileでは環境設定や関数設定の後に以下の記述できる:

. ~/.bash_login

同様に、cshはログインシェルを終了した場合のみに起動される~/.logoutファイルを持つ。Bashでこれに相当するのは~/.bash_logoutであり、特殊な設定は必要ない。Bourne Shellでは、似たような効果を得るためにはtrapビルトインを使用できる。

レガシー互換なBash起動例[編集]

以下の~/.bash_profileのスケルトンはBourne Shellと互換性があり、~/.bashrc~/.bash_loginに対してcshと似たセマンティクスを提供する。[ -r filename ]filenameが存在し読み込めるかどうかを調べるテストであり、存在しない場合&&の後の部分は単にスキップされるだけである。

[ -r ~/.profile ] && . ~/.profile             # 環境設定で、かつてはBourne Shell限定の構文
if [ -n "$PS1" ] ; then                       # インタラクティブか?
   [ -r ~/.bashrc     ] && . ~/.bashrc        # インタラクティブシェル用のtty/プロンプト/関数設定
   [ -r ~/.bash_login ] && . ~/.bash_login    # ログインシェル専用のログイン時タスク
fi                                            # "if" ブロック終了

Bash起動におけるオペレーティングシステムの問題[編集]

UNIXLinuxのバージョンの中には、/etcディレクトリ配下にBashシステムス起動スクリプトが存在するものもある。Bashはこれらのスクリプトを、Bashの通常の初期化の一部として呼び出すが、それ以外の起動ファイルをBash起動シーケンスの記述と異なる順序で読み込むこんでしまう可能性がある。さらにシステムが新しいユーザーアカウントに設定を提供するスケルトンファイルのように、rootユーザーのファイル内におけるデフォルトの内容に問題がある可能性もある。ウィンドウマネージャの起動前にユーザーがBash起動スクリプトで自身の環境変数を準備しようとすると、X Window Systemの起動スクリプトにより予想外の問題が発生する可能性がある。これらの問題は、~/.profileを読み込むために~/.xsession~/.xprofileファイルを使う場合に発生する可能性が高い。これらのファイルはxtermGNOME 端末などの、ウィンドウマネージャから生み出されたBashシェルウインドウが必要とする環境変数を提供する。

移植性[編集]

--posixオプションを付けてBashを呼び出したり、スクリプトにset -o posixを記述すると、BashはPOSIX 1003.2 standardに非常に良く準拠する[37]移植を前提としたBashシェルスクリプトは、最低でもBashをBourne Shellで置き換えた場合を考慮しなければならない。伝統的なBourne ShellにはないがBashには搭載されている機能は以下である[37]:

  • 特定の拡張呼び出しオプション
  • $( ) 記法を使ったコマンド代替(ただしこの機能はPOSIX 1003.2規格の一部)
  • Brace expansion
  • 特定の配列演算と連想配列
  • テストコンストラクトを拡張する二重括弧
  • 二重括弧の算術評価コンストラクト
  • 特定の文字列操作操作
  • プロセス代替
  • 正規表現マッチング演算子
  • Bash特有のビルトイン
  • コプロセス

"bashism" とは、Bash以外のUnixシェルでは適切に動作しないBashコードの部分を指す[38]

キーボードショートカット[編集]

Bashはデフォルトの (Emacs) キーバインディングを利用して編集するためのコマンドライン用キーボードショートカットを提供するために、Readlineを利用する。set -o viを起動すればViバインディングが利用可能となる[39]

プロセス管理[編集]

Bashにはコマンドに対する実行モードとして、batchモードと並行実行モードの2つがある。

batchモードでコマンドを実行する(つまり順番通りにコマンドを実行する)ためには、コマンドを ";" 文字や別の行で分割する必要がある:

command1; command2

上記の例では、command1が完了した後でcommand2が実行される。

command1とcommand2を並行実行するには、以下の方法でBashで実行する必要がある:

command1 & command2

上記の例では、command1がバックグラウンド(シンボル "&")で実行され、フォアグラウンドでcommand2を実行するシェルへとすぐに制御が戻される。

プロセスはフォアグラウンド状態とバックグラウンド状態だけでなく、停止状態にすることも可能である。プロセスがフォアグラウンドで実行されていれば、これはCtrl+zをタイプすることで行える。バックグラウンドプロセスおよび停止されたプロセスの全てを一覧するにはjobsを起動することで行える:

$ jobs
[1]-  Running                  command1 &
[2]+  Stopped                  command2

上記の出力では、括弧内の数はジョブIDを示している。プラス記号はbgfgに対応するデフォルトプロセスを指し示す。"Running" および "Stopped" というテキストは、プロセス状態英語版を指し示す。最後の文字列はプロセスを開始したコマンドである。

プロセスの状態は様々なコマンドを使うことで変更できる。fgコマンドはプロセスをフォアグラウンドにして、bgは停止されたプロセスをバックグラウンドで実行するよう設定する。bgfgは最初の引数に処理するプロセスを指定するジョブIDを渡すことができる。引数がない場合、jobsの出力でプラス記号が付いたデフォルトプロセスに対して処理が行われる。プロセスにシグナルを送って中断するためには、killコマンドを使うことができる。ジョブIDはパーセント記号の後に指定する必要がある:

kill -s SIGKILL %1

条件付き実行[編集]

Bashは先行するコマンドにより設定された終了コードに応じてコマンドを実行する、「条件付き実行」コマンド区切り文字を提供する。以下にその例を示す:

cd "$SOMEWHERE" && ./do_something || echo "An error occurred" >&2

./do_somethingは、cd (change directory) コマンドが「成功」した(終了ステータスとして0を返した)場合のみ実行され、echoコマンドはcd./do_somethingコマンドのどちらかがエラーを返した(終了ステータスが0以外を返した)場合のみ実行される。

全てのコマンドに対して、終了ステータスは特殊な変数である$?に保存される。Bashは条件コマンド評価の形式として、if ...;then ...;else ...;ficase $VARIABLE in $pattern)...;;$other_pattern)...;; esacもサポートする。

バグ報告[編集]

bashbugと呼ばれる外部コマンドはBashのバグを報告する。このコマンドが呼び出されると、フォームが入力された状態でユーザーのデフォルトエディタが表示される。このフォームはBashのメンテナ(またはオプションでそれ以外のメールアドレス)にメールされる[40][41]

関連項目[編集]

脚注[編集]

  1. ^ Bash-4.4” (2017年1月27日). 2017年6月14日閲覧。
  2. ^ Bash FAQ
  3. ^ http://apple.stackexchange.com/questions/208312/why-does-apple-ship-bash-3-2
  4. ^ https://github.com/Microsoft/BashOnWindows/issues/107
  5. ^ GNU Bash”. SoftNews. 2016年4月9日閲覧。
  6. ^ GNU Project. “README file”. 2017年10月21日閲覧。 “Bash is free software, distributed under the terms of the [GNU] General Public License as published by the Free Software Foundation, version 3 of the License (or any later version).”
  7. ^ a b c リチャード・ストールマン (forwarded with comments by Chet Ramey) (1988年2月10日). “GNU + BSD = ?”. comp.unix.questions. (ウェブリンク). "For a year and a half, the GNU shell was "just about done". The author made repeated promises to deliver what he had done, and never kept them. Finally I could no longer believe he would ever deliver anything. So Foundation staff member Brian Fox is now implementing an imitation of the Bourne shell.". 2011年3月22日閲覧。 
  8. ^ Hamilton, Naomi (May 30, 2008), “The A-Z of Programming Languages: BASH/Bourne-Again Shell”, Computerworld: 2, http://www.computerworld.com.au/article/222764/a-z_programming_languages_bash_bourne-again_shell/?pp=2&fp=16&fpid=1 2011年3月21日閲覧, "When Richard Stallman decided to create a full replacement for the then-encumbered Unix systems, he knew that he would eventually have to have replacements for all of the common utilities, especially the standard shell, and those replacements would have to have acceptable licensing." 
  9. ^ a b Brian Fox (forwarded by Leonard H. Tower Jr.) (1989年6月8日). “Bash is in beta release!”. gnu.announce. (ウェブリンク). 2010年10月28日閲覧。 
  10. ^ How to install Bash shell command-line tool on Windows 10
  11. ^ C Programming by Al Stevens, Dr. Dobb's Journal, July 1, 2001
  12. ^ リチャード・ストールマン (2010年11月12日). “About the GNU Project”. Free Software Foundation. 2011年4月24日時点のオリジナルよりアーカイブ。2011年3月13日閲覧。 “"Bourne Again Shell" is a play on the name Bourne Shell, which was the usual shell on Unix.”
  13. ^ Gattol, Markus (March 13, 2011), Bourne-again Shell, http://www.markus-gattol.name/ws/bash.html 2011年3月13日閲覧, "The name is a pun on the name of the Bourne shell (sh), an early and important Unix shell written by Stephen Bourne and distributed with Version 7 Unix circa 1978, and the concept of being "born again"." 
  14. ^ Rohaut, Sébastien (April 2015). LINUX: Preparación para la certificación LPIC-1 : Exámenes LPI 101 y LPI 102. Editions ENI. p. 170. ISBN 978-2-7460-9513-7. https://books.google.com/books?id=9HbUHgnfSfkC&pg=PA170&dq=bash+bourne+shell+%22born+again+%22&hl=en&sa=X&ved=0ahUKEwi_jIeBrJDUAhUL04MKHQwNC9kQ6AEIMzAD#v=onepage&q=bash%20bourne%20shell%20%22born%20again%20%22&f=false 2017年5月27日閲覧. "El bash es un derivado de Bourne Shell. Bourne es el nombre del principal programm programador de este shell. La expresión "Bourne Again" es un guiño a los origenes del bash (Bourne) y un juengo de palabras en "I born again", lo qui significa "he nacido otra vez" o "reencarnado". [Bash is a derivative of Bourne Shell. Bourne is the name of the main programmer for this shell. The expression "Bourne Again" is a nod to the origins of bash (Bourne) and a pun on "born again", which means "I was born again" or "reincarnated".]" 
  15. ^ Stallman, Richard (1999). Il progetto GNU. Open Sources. Voci dalla rivoluzione Open Source. Apogee Publisher. p. 66. https://books.google.com/books?id=Z8IIgmP9_2UC&pg=PA65&dq=bash+bourne+shell+%22born+again+%22&hl=en&sa=X&ved=0ahUKEwj2xKW1rZDUAhWO0YMKHZaYACw4ChDoAQhaMAc#v=onepage&q=bash%20bourne%20shell%20%22born%20again%20%22&f=false 2017年5月27日閲覧. ""Bourne Again Shell" è un gioco di parole sul nome "Bourne Shell", che era la normale shell di Unix. NdT: "Bourne again" richiama l'expressione cristiana "born again", "rinato" (in Cristo). ["Bourne Again Shell" is a pun on the name "Bourne Shell", which was the normal Unix shell. NdT: "Bourne again" refers to the Christian expression "born again", "reborn" (in Christ).)]" 
  16. ^ Leyden, John (2014年9月24日). “Patch Bash NOW: 'Shell Shock' bug blasts OS X, Linux systems wide open”. The Register英語版. 2014年9月25日閲覧。
  17. ^ Perlroth, Nicole (2014年9月25日). “Security Experts Expect ‘Shellshock’ Software Bug in Bash to Be Significant”. ニューヨーク・タイムズ. https://www.nytimes.com/2014/09/26/technology/security-experts-expect-shellshock-software-bug-to-be-significant.html 2014年9月25日閲覧。 
  18. ^ Seltzer, Larry (2014年9月29日). “Shellshock makes Heartbleed look insignificant”. ZDNet. 2016年5月14日時点のオリジナルよりアーカイブ。2017年10月21日閲覧。
  19. ^ Brian Fox (August 29, 1996), shell.c, フリーソフトウェア財団, http://ftp.gnu.org/gnu/bash/bash-1.14.7.tar.gz, "Birthdate: Sunday, January 10th, 1988. Initial author: Brian Fox" 
  20. ^ リチャード・ストールマン (2010年10月3日). “About the GNU Project”. Free Software Foundation. 2011年4月24日時点のオリジナルよりアーカイブ。2011年3月21日閲覧。 “Free Software Foundation employees have written and maintained a number of GNU software packages. Two notable ones are the C library and the shell. ... We funded development of these programs because the GNU Project was not just about tools or a development environment. Our goal was a complete operating system, and these programs were needed for that goal.”
  21. ^ len (g...@prep.ai.mit.edu) (1993年4月20日). “January 1993 GNU's Bulletin”. gnu.announce. (ウェブリンク). 2010年10月28日閲覧。 
  22. ^ Chet Ramey (October 31, 2010), Dates in your Computerworld interview, https://www.scribd.com/doc/40556434/2010-10-31-Chet-Ramey-Early-Bash-Dates 2010年10月31日閲覧。 
  23. ^ Ramey, Chet (1994年8月1日). “Bash - the GNU shell (Reflections and Lessons Learned)”. Linux Journal. 2008年12月5日時点のオリジナルよりアーカイブ。2008年11月13日閲覧。
  24. ^ Chet Ramey (1989年6月12日). “Bash 0.99 fixes & improvements”. gnu.bash.bug. (ウェブリンク). 2010年11月1日閲覧。 
  25. ^ Chet Ramey (1989年7月24日). “Some bash-1.02 fixes”. gnu.bash.bug. (ウェブリンク). 2010年10月30日閲覧。 
  26. ^ Brian Fox (1990年3月2日). “Availability of bash 1.05”. gnu.bash.bug. (ウェブリンク). 2010年10月30日閲覧。 
  27. ^ Foster-Johnson, Eric; Welch, John C.; Anderson, Micah (April 2005). Beginning Shell Scripting. John Wiley & Sons, Inc.. p. 6. ISBN 978-0-7645-9791-6. https://books.google.com/books?id=dwIRERUpQPEC&pg=PA6&dq=bash+most+popular+unix+shell&hl=en&sa=X&ved=0ahUKEwi_3fnR2pPNAhUX3GMKHTEdAZoQ6AEIQTAF#v=onepage&q=bash%20most%20popular%20unix%20shell&f=false 2016年6月6日閲覧. "Bash is by far the most popular shell and forms the default shell on Linux and Mac OSX systems." 
  28. ^ Danesh, Arman; Jang, Michael (February 2006). Mastering Linux. John Wiley & Sons, Inc.. p. 363. ISBN 978-0-7821-5277-7. https://books.google.com/books?id=tIjrVYbZmUAC&pg=PA363&dq=bash+most+popular+unix+shell&hl=en&sa=X&ved=0ahUKEwjnipq_3JPNAhUH52MKHUD-DA04ChDoAQgpMAA#v=onepage&q=bash%20most%20popular%20unix%20shell&f=false 2016年6月6日閲覧. "The Bourne Again Shell (bash) is the most common shell installed with Linux distributions." 
  29. ^ Bresnahan, Christine; Blum, Richard (April 2015). CompTIA Linux+ Powered by Linux Professional Institute Study Guide: Exam LX0-103 and Exam LX0-104 (3rd ed.). John Wiley & Sons, Inc.. p. 5. ISBN 978-1-119-02122-3. https://books.google.com/books?id=2P3zBgAAQBAJ&pg=PA5&dq=%22most+popular%22+linux+shell&hl=en&sa=X&ved=0ahUKEwiDhpnX4JPNAhWCKGMKHQCmCoEQ6AEIRjAH#v=onepage&q=%22most%20popular%22%20linux%20shell&f=false 2016年6月6日閲覧. "In Linux, most users run bash because it is the most popular shell." 
  30. ^ https://www.linkedin.com/pub/st%C3%A9phane-chazelas/7/2a2/834
  31. ^ https://cve.mitre.org/cgi-bin/cvename.cgi?name=2014-6277
  32. ^ Huzaifa Sidhpurwala (2014年9月24日). “Bash specially-crafted environment variables code injection attack”. レッドハット. 2017年10月21日閲覧。
  33. ^ a b “6.11 Bash POSIX Mode”, The GNU Bash Reference Manual, for Bash, Version 4.1, (December 23, 2009), オリジナルのDecember 3, 2010時点によるアーカイブ。, https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html 2010年10月26日閲覧。 
  34. ^ Advanced Bash-Scripting Guide”. 2017年3月5日閲覧。
  35. ^ The syntax matches that shown on the regex(7) manページ.
  36. ^ "The shell provides associative array variables, with the appropriate support to create, delete, assign values to, and expand them." http://tiswww.case.edu/php/chet/bash/NEWS
  37. ^ a b Mendel Cooper. “Portability Issues”. The Linux Documentation Project. ibiblio.org. 2017年10月21日閲覧。
  38. ^ https://linux.die.net/man/1/checkbashisms
  39. ^ BASH Help - A Bash Tutorial”. Hypexr.org (2012年10月5日). 2013年7月21日閲覧。
  40. ^ bashbug(1), die.net
  41. ^ "Linux / Unix Command: bashbug", apple.com

外部リンク[編集]