Bash

Unixシェルかつコマンド言語

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

Bash
Bashセッションのスクリーンショット
作者 ブライアン・フォックス英語版
初版 1989年6月8日 (35年前) (1989-06-08)
最新版
5.2.37[1] ウィキデータを編集 / 2024年9月23日 (2か月前)
リポジトリ ウィキデータを編集
プログラミング
言語
C
対応OS
プラットフォーム GNU
対応言語 多言語 (gettext)
種別 Unixシェルコマンド言語英語版
ライセンス GNU GPL v3+[6]
公式サイト www.gnu.org/software/bash/
テンプレートを表示

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

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

歴史

編集

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

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

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

機能

編集

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

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

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

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

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

Bash3.0ではPerl言語を思い起こさせる構文を使用した、シェル組み込みの正規表現をサポートする[30][31]

Bash4.0では連想配列のサポートが導入された[29][32]

ブレース展開

編集

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

$ 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 shellやC shellの起動シーケンスとの比較

編集

Bashの各要素はBourne shellやC 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 shellとBashではこの問題に直接的を絞ったサブシェル毎の起動ファイルをサポートする。Bashでは ~/.bashrc がインタラクティブサブシェルのために呼び出される[※ 5]~/.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 ファイル ]ファイル が存在し読み込める場合0を、そうでない場合は1を返す。返り値が0の場合 && の後の部分が評価される。

[ -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に非常に良く準拠する[33]。伝統的なBourne ShellにはないがBashには搭載されている機能は以下である[33]:

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

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

キーボードショートカット

編集

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

プロセス管理

編集

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のメンテナ(またはオプションでそれ以外のメールアドレス)にメールされる[36][37]

注釈

編集
  1. ^ CVE - CVE-2014-6271
  2. ^ CVE - CVE-2014-6277
  3. ^ CVE - CVE-2014-7169
  4. ^ C shellとBashのブレース展開は要素がひとつの時の挙動が異なる。
    % csh -c 'echo a{p}e'
    ape
    % bash -c 'echo a{p}e'
    a{p}e
    
  5. ^ C shellでは ~/.cshrc がインタラクティブサブシェルのために呼び出される。また、tcsh では ~/.tcshrc が、その後 ~/.cshrc がインタラクティブサブシェルのために呼び出される。

出典

編集
  1. ^ Index of /gnu/bash”. 4 12月 2024閲覧。
  2. ^ Bash FAQ
  3. ^ macos - Why does Apple ship bash 3.2? - Ask Different
  4. ^ Missing source code - GPL compliance? · Issue #107 · microsoft/WSL · GitHub
  5. ^ GNU Bash”. Softpedia. SoftNews. 9 April 2016閲覧。
  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) (10 February 1988). "GNU + BSD = ?". Newsgroupcomp.unix.questions. Usenet: 2362@mandrill.CWRU.Edu. 2011年3月22日閲覧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.
  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 March 21, 2011閲覧, "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.) (8 June 1989). "Bash is in beta release!". Newsgroupgnu.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. ^ リチャード・ストールマン (November 12, 2010). “About the GNU Project”. Free Software Foundation. April 24, 2011時点のオリジナルよりアーカイブ。March 13, 2011閲覧。 “"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 March 13, 2011閲覧, "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 May 27, 2017閲覧. "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 May 27, 2017閲覧. ""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. ^ 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" 
  17. ^ リチャード・ストールマン (October 3, 2010). “About the GNU Project”. Free Software Foundation. April 24, 2011時点のオリジナルよりアーカイブ。March 21, 2011閲覧。 “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.”
  18. ^ len (g...@prep.ai.mit.edu) (20 April 1993). "January 1993 GNU's Bulletin". Newsgroupgnu.announce. Usenet: gnusenet930421bulletin@prep.ai.mit.edu. 2010年10月28日閲覧
  19. ^ Chet Ramey (October 31, 2010), Dates in your Computerworld interview, https://www.scribd.com/doc/40556434/2010-10-31-Chet-Ramey-Early-Bash-Dates October 31, 2010閲覧。 
  20. ^ Ramey, Chet (August 1, 1994). “Bash - the GNU shell (Reflections and Lessons Learned)”. Linux Journal. December 5, 2008時点のオリジナルよりアーカイブ。November 13, 2008閲覧。
  21. ^ Chet Ramey (12 June 1989). "Bash 0.99 fixes & improvements". Newsgroupgnu.bash.bug. 2010年11月1日閲覧
  22. ^ Chet Ramey (24 July 1989). "Some bash-1.02 fixes". Newsgroupgnu.bash.bug. 2010年10月30日閲覧
  23. ^ Brian Fox (2 March 1990). "Availability of bash 1.05". Newsgroupgnu.bash.bug. 2010年10月30日閲覧
  24. ^ 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 June 6, 2016閲覧. "Bash is by far the most popular shell and forms the default shell on Linux and Mac OSX systems." 
  25. ^ 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 June 6, 2016閲覧. "The Bourne Again Shell (bash) is the most common shell installed with Linux distributions." 
  26. ^ 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 June 6, 2016閲覧. "In Linux, most users run bash because it is the most popular shell." 
  27. ^ https://www.linkedin.com/pub/st%C3%A9phane-chazelas/7/2a2/834
  28. ^ Huzaifa Sidhpurwala (2014年9月24日). “Bash specially-crafted environment variables code injection attack”. レッドハット. 2017年10月21日閲覧。
  29. ^ 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 October 26, 2010閲覧。 
  30. ^ Advanced Bash-Scripting Guide”. www.tldp.org. 2017年3月5日閲覧。
  31. ^ The syntax matches that shown on the regex(7) manページ.
  32. ^ "The shell provides associative array variables, with the appropriate support to create, delete, assign values to, and expand them." https://tiswww.case.edu/php/chet/bash/NEWS
  33. ^ a b Mendel Cooper. “Portability Issues”. The Linux Documentation Project. ibiblio.org. 2017年10月21日閲覧。
  34. ^ https://linux.die.net/man/1/checkbashisms
  35. ^ BASH Help - A Bash Tutorial”. Hypexr.org (October 5, 2012). July 21, 2013閲覧。
  36. ^ bashbug(1), die.net
  37. ^ "Linux / Unix Command: bashbug", apple.com

関連項目

編集

外部リンク

編集