Bash

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動
Bash
Gnu-bash-logo.svg
Bash screenshot.png
Bashセッションのスクリーンショット
作者 ブライアン・フォックス英語版
初版 1989年6月8日(29年前) (1989-06-08
最新版 4.4.12 / 2017年1月27日(21か月前) (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の予約語構文などの言語の基本的要素は全て Bourne shell からコピーされており、ヒストリなど Bourne shell 以外の機能は C shellKornShell からコピーされている。BashPOSIX 準拠のシェルであるが、数多くの拡張がされている。

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コマンド置換英語版構文である$(コマンド)など、KornShellC shell から引用したアイデアが含まれる。

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

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

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

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

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

ブレース展開[編集]

ブレース展開はオルターネイションとも呼ばれ、C shell から取り入れた機能である[37]。ブレース展開は取り得る組み合わせのセットを生成する。生成された結果はファイルとして存在する必要はない。展開された各文字列結果はソートされておらず、保存された順に左から右へと並んでいる:

$ 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 と同じ出力を返さないため、ユーザーは移植するためのシェルスクリプトでブレース展開を使うべきではない。

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

ブレース展開がワイルドカードと組み合わされた場合、最初に括弧が展開されてから通常通りワイルドカードが置換される。したがって、カレントディレクトリにある拡張子が .jpg または .jpeg または .png のファイル群を獲得するには以下のようにする:

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

ブレース展開は取り得る全ての組み合わせだけではなく、連続した範囲に対して適用することも可能である。範囲は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

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

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

起動スクリプト[編集]

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

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

条件 順序
インタラクティブな非ログインシェルとして起動 Bash/bash.bashrcを読み込んで実行してから、(存在する場合)~/.bashrcを読み込んで実行する。これは --norc オプションを使うことで禁止することができる。--rcfile ファイルオプションにより、~/.bashrc の代わりに ファイル からコマンドを読み込んで実行するよう Bash に強制させることができる。
インタラクティブなログインシェルとして起動 Bash は(存在する場合)/etc/profile(ファイル名を/etc/bash.bashrcと改名されることが多い)を読み込み実行する。このファイルを読み込んだ後、~/.bash_profile~/.bash_login、および~/.profileをこの順番で調べ、存在しかつ読み込めるもののうち最初のものを読み込んで実行する。
ログインシェルを終了した場合 Bash は(存在する場合)~/.bash_logoutを読み込んで実行する。

Bourne shellC shell の起動シーケンスとの比較[編集]

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

項目 違い
継承可能な環境変数の設定 Bourne shell はサブプロセス化されてから継承する環境変数を設定するため、ログイン時に~/.profileを使用する。Bash でも、Bash 固有の~/.bash_profile~/.bash_loginに以下の行を記述して、それらから明示的に~/.profileを実行することで Bourne shell と互換性を保つことが可能となる。Bash固有の構文を~/.profileに記述しないことで、Bourne shell との後方互換性を保つことが可能となる。
. ~/.profile
エイリアスと関数 C shell 由来のエイリアスという機能が存在するが、その大部分を置き換える Bourne shell 由来の関数という機能はエイリアスよりも一般的である。これら2つの機能は通常ログインシェルから継承することはできず、ログインシェルによって生み出されたサブシェル毎に再定義する必要があった。この問題の対処に利用可能な環境変数 ENV が存在するが、C shellBash ではこの問題に直接的を絞ったサブシェル毎の起動ファイルをサポートする。Bash では ~/.bashrc がインタラクティブサブシェルのために呼び出される[38]~/.bashrc にあるユーザー定義関数がログインシェルでも必要な場合、以下の行を ~/.bash_login へ必要な環境変数の設定後に記述する:
. ~/.bashrc
ログイン時のみやログアウト時のみに実行するコマンド C shell は最初のログイン時のみに実行されるタスクのための ~/.login ファイルをサポートする。このようなタスクにはシステムのロード、ディスクステータス、電子メールが来たかの有無などの表示や、ログイン時間のロギングなどがある。Bourne shell~/.profile でこのファイルを模倣できるが、ファイル名は事前に定義されていない。C shell モデルに似たセマンティクスを実現するため、~/.bash_profile では環境設定や関数設定の後に以下の様に記述できる:
. ~/.bash_login

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

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

以下の ~/.bash_profile コードは Bourne shell と互換性があり、~/.bashrc~/.bash_login に対して C shell と似たセマンティクスを提供する。[ -r ファイル名 ]は指定した ファイル名 のファイルが存在し読み込めるかどうかを調べるテストであり、存在しない場合 && の後の部分は評価(実行)されない(⇒ 短絡評価)。

[ -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 起動シーケンスの記述と異なる順序で読み込むこんでしまう可能性がある。さらにシステムが新しいユーザーアカウントに設定を提供するスケルトンファイルのように、ルート・ユーザーのファイル内におけるデフォルトの内容に問題がある可能性もある。ウィンドウマネージャの起動前にユーザーが Bash 起動スクリプトで自身の環境変数を準備しようとすると、X Window System の起動スクリプトにより予想外の問題が発生する可能性がある。これらの問題は、~/.profile を読み込むために ~/.xsession~/.xprofile ファイルを使う場合に発生する可能性が高い。これらのファイルは xtermGNOME 端末などの、ウィンドウマネージャから生み出された Bash シェルウインドウが必要とする環境変数を提供する。

移植性[編集]

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

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

bashism (バシズム) とは、Bash 以外の Unix シェルでは適切に動作しない Bash コードの部分を指す[40]

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

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

プロセス管理[編集]

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

バッチモードつまりコマンドを逐次的に実行するためには、コマンドを「;」文字や別の行で分割する必要がある:

コマンド1; コマンド2

上記の例では、コマンド1 が完了した後で コマンド2 が実行される。

コマンド1コマンド2 を並行実行するには、以下の方法で実行する必要がある:

コマンド1 & コマンド2

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

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

$ jobs
[1]-  Running                  コマンド1 &
[2]+  Stopped                  コマンド2

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

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

kill -s SIGKILL %1

条件付き実行[編集]

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

cd ディレクトリー・パス && ./何かのコマンド || echo "エラーが発生しました。" >&2

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

全てのコマンドに対して、終了ステータスは特殊な変数である $? に保存される。Bash は条件コマンド評価の形式として、if 条件 ; then 条件を満たす場合の処理 ; else 条件を満たさない場合の処理 ; ficase $変数 in パターン1) 処理1 ;; パターン2) 処理2 ;; esac もサポートする。

バグ報告[編集]

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

関連項目[編集]

脚注[編集]

  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”. Softpedia. 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”. www.tldp.org. 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. ^ C shellBash のブレース展開は要素がひとつの時の挙動が異なる。
    % csh -c 'echo a{p}e'
    ape
    % bash -c 'echo a{p}e'
    a{p}e
    
  38. ^ C shell では ~/.cshrc がインタラクティブサブシェルのために呼び出される。また、tcsh では ~/.tcshrc が、その後 ~/.cshrc がインタラクティブサブシェルのために呼び出される。
  39. ^ a b Mendel Cooper. “Portability Issues”. The Linux Documentation Project. ibiblio.org. 2017年10月21日閲覧。
  40. ^ https://linux.die.net/man/1/checkbashisms
  41. ^ BASH Help - A Bash Tutorial”. Hypexr.org (2012年10月5日). 2013年7月21日閲覧。
  42. ^ bashbug(1), die.net
  43. ^ "Linux / Unix Command: bashbug", apple.com

外部リンク[編集]