Bashセッションのスクリーンショット | |
| 原作者 | ブライアン・フォックス |
|---|---|
| 開発者 | チェット・レイミー |
| 初回リリース | 1989年6月8日 |
| 安定版リリース | 5.2.37 [1]
/ 2024年9月23日 |
| リポジトリ |
|
| 書かれた | C |
| オペレーティング·システム | |
| プラットフォーム | GNU |
| 利用可能 | 多言語 ( gettext ) |
| タイプ | シェル(コンピューティング)、 Unix シェル、 コマンド言語 |
| ライセンス | 4.0 以降: GPL-3.0-or-later、 1.11? から 3.2: GPL-2.0-or-later、 0.99? から 1.05?: GPL-1.0-or-later |
| Webサイト | www.gnu.org/software/bash/ |
Bash はBourne-Again SHellの略で、フリーソフトウェア財団[2] がサポートするシェル プログラムおよびコマンド言語であり、最初はBrian FoxによってGNU プロジェクト[3]向けに開発されました。[4] Bourne shellの100% [5]フリーソフトウェア代替として設計され、[6] [7] [8] 1989 年に最初にリリースされました。[9]その名前は言葉遊びで、前身である Bourne shell [10]と再生の概念の両方を参照しています。[11] [12]
Bashは登場以来、広く採用され、多くのLinuxディストリビューションのデフォルトのログインシェルとして一般的に使用されています。Bashは、GNUコンパイラ(GCC)と並んで、 Linus TorvaldsによってLinuxに移植された最も初期のプログラムの一つとして歴史的な意義を持っています。 [13]ほぼすべての最新のオペレーティングシステムで利用できるため、さまざまなコンピューティング環境で多目的に使用できるツールとなっています。
コマンド プロセッサとして、Bash はテキスト ウィンドウ内で動作し、ユーザーはこのウィンドウにコマンドを入力してさまざまなタスクを実行します。また、シェル スクリプトと呼ばれるファイルからのコマンド実行もサポートしているため、自動化が容易です。Unixシェルの規則に従って、Bash には豊富な機能が組み込まれています。キーワード、構文、動的スコープ変数、およびその他の基本言語機能はすべて、Bourne シェル、からコピーされています。履歴shなどのその他の機能は、C シェル、、およびKorn シェル、からコピーされています。これは、拡張機能を備えたPOSIX準拠のシェルです。
cshksh
歴史
BashはUNIXやGNU/LinuxなどのUNIX系オペレーティングシステム向けに開発されましたが、[14] Android、macOS、Windows、その他多数の現行および過去のオペレーティングシステムでも利用可能です。「特殊なシェルを作成する試みはありましたが、Bourneシェルの派生が引き続き主要なシェルとして使用されています。」[15]リダイレクトはMulticsでも始まりました(wikipedia Multicsページ)。
( 作業中 )
1963
MITでCCTSオペレーティングシステムを開発していたとき、ルイ・プーザンは「引数置換を備えたコマンドスクリプトの実行を駆動する一種のシェルである『RUNCOM』」を書いた。彼は「コマンドは、サブルーチンライブラリのように、より多くのコマンドを書くための構成要素として使用できるべきだと感じた」[ 16] 。
1964
MULTICS の開発は MIT で始まりました。
1965
MIT の Louis Pouzin 氏: 「その頃、イギリスの科学者 Christopher Strachey 氏が MIT を訪れていました。彼のマクロ ジェネレーターの設計は、私にとってコマンド言語の非常に堅固な基盤、特に引用符と引数の受け渡しの技術に思えました。この件について招待されなかったにもかかわらず、私はこの目的のために Multics コマンド言語をどのように設計できるかを説明する論文を書きました。そして、その名前に「シェル」という言葉を造語しました。」[16]
1965 年 4 月 2 日、MIT、「SHELL、システム内のプロシージャの呼び出しと連鎖のためのグローバル ツール」、Louis Pouzin 著。「コマンド」の定義、区切り文字としてのスペース、最初の引数は常にコマンド、その他の引数はコマンドに渡されるパラメーター、包括的なエラー コード、空白を含む引用符付きリテラル、HOME のコマンド検索、シェル実行ファイルを含むユーザー提供の実行ファイル、シェルまたは個々のプログラムによる引数の解析、各シェル呼び出しは個別の子プロセス、完全なコマンド ラインが格納される「スタック」のオプションの履歴、プロセスのカーネル処理への侵入、QUIT シグナル、DEBUG システム、任意の制限されたサイズの出力メモリ、入力としてのファイル、コマンド ラインを区切るコンマ (現在の算術演算と同じ)、同期コマンド、コマンド操作中のユーザー制御の一時停止、システムの一般的な規則として定義された引数のセット、コマンド名としての more、子プロセスが RO メモリの作業コピーを取得する
「コマンドは、コンソールの前に座り、何が起こっているのかと疑問に思い、規則を完全に理解していても引数を誤って入力したり忘れたり、急いで終了したり、キャリッジ リターンしたり、その他の気まぐれな反応でコマンドに干渉したりする可能性のあるユーザーを念頭に置いて設計する必要があります。... また、予期しない状況が発生した場合は、コマンドで、ユーザーがさらにアクションを実行するために知っておく必要があることを明確に指定する必要があります。また、呼び出しプログラムとは異なり、ユーザーには、事前に決定された一連の指示が一度だけ割り当てられるわけではありません。次に何をするつもりなのかわからないため、実行された内容について誤解が生じる可能性についてコマンドが警告しない場合は、最終的に、非常に推奨されるチェックを見落としてしまいます。」
「コンソール制御 (現在はコマンド レベルと呼ばれています) 下でアクティブな実行中のプロセスが他にない場合、ユーザーがコンソールに何らかのメッセージを入力するたびに、スーパーバイザによって自動的に呼び出される共通プロシージャを想定できます。このプロシージャは、コンソール メッセージとサブルーチン間のインターフェイスとして機能します。このようなプロシージャの目的は、別のプログラム内で呼び出された場合に、任意のプロシージャをアクティブ化できる交換媒体を作成することです。以降、簡略化のために、このプロシージャをSHELL と呼びます。」
「システムで利用可能なすべてのツールを呼び出すことができるという事実 (特定のモニターの機能のみではなく) は、タスクの連鎖とインターセプションに非常に高い柔軟性を提供し、制御カードと関連データの線形ストリームの拘束から解放します。SHELL の一部は特にコンソール指向ですが、単にコンソール指向のツールとして見なされるべきではありません。実際のところ、S}lliLL はまず第一に一般的な手順リンク ツールであり、実行中にコンソールが接続されないバッチ タイプのプロセス要件にも同様に適しています。」
「一般的なポリシーとして、すべてのシステム ツールは、メタ引数に関して the-SHEU.. と同じルールを維持する必要があります。これにより、すべての手順間で明確な一貫性と論理的な動作が実現します。」
「これは、1965 年にアメリカのソフトウェア エンジニア Glenda Schroeder によって開発された Multics シェルをモデルにしています。Schroeder の Multics シェル自体は、Louis Pouzin が Multics チームに示した RUNCOM プログラムをモデルにしています。一部の Unix 構成ファイル (たとえば、「.vimrc」) の「rc」サフィックスは、Unix シェルの RUNCOM 祖先の名残です。」(UNIX シェルに関する Wikipedia ページ)
1969
MULTICSオペレーティングシステムは、MIT、GE、ベル研究所の共同作業で導入されました。「これは、コマンドプロセッサを通常のユーザーコードとして実装した最初のオペレーティングシステムでもあり、このアイデアは後に Unix シェルで使用されました。」Multics Wikipage トンプソンシェルの前身は、1971 年より前に MULTICS に存在していました。[ 15]
AT&T は、独自のライセンスの下で、ベル研究所で UNIX の開発を開始しました。
1971
「ベル研究所のケン・トンプソンは、UNIX用の最初のシェル「V6シェル」を開発した。」その唯一の目的は、対話型シェルとして機能することだった。globパターンマッチング用の 、および条件式用の という外部コマンドをサポートしていた。「このシェルは、リダイレクト(および)とパイプ(または)ifのためのコンパクトな構文を導入し、これは現代のシェルにも引き継がれている。また、シーケンシャルコマンド( を使用)と非同期コマンド( を使用)の呼び出しもサポートされている。」[15]また、gotoコマンドも組み込まれていた。
< >>>|^;&
1973
UNIX はもともと Ken Thompson、Dennis Ritchie、Brian Kernighan らによって書かれ、AT&T によってリリースされました (wikipedia UNIX ページ)。
1977
アメリカ国家標準情報交換コード(ASCII)は、国立科学技術研究所(NIST)によってFIPS PUB 1-2として発行されています。[17] ASCII文字セットは、移植可能なシェルスクリプトを作成するための中核コンポーネントとして今日でも使用されています。
「Bourne シェルが導入されました。AT&T ベル研究所の Stephen Bourne によって V7 UNIX 用に作成され、今日でも有用なシェルです (場合によってはデフォルトのルート シェルとして)。」 「Bourne はスクリプトに制御フロー、ループ、変数を導入し、オペレーティング システムと対話するためのより機能的な言語を提供しました (対話型と非対話型の両方)。シェルでは、シェル スクリプトをフィルターとして使用してシグナル処理の統合サポートを提供することもできますが、関数を定義する機能は備えていませんでした。最後に、コマンド置換 (バック クォートを使用) や、保存された文字列リテラルをスクリプト内に埋め込むための HERE ドキュメントなど、今日使用されている多くの機能が組み込まれました。」[15]テスト演算子の -eq、-ne、-lt スタイルを使用しました 。
Korn シェルは Bourne シェルとほぼ同時期に導入されました。連想配列や浮動小数点演算など、Python や Ruby から借用した機能を提供し、新しい POSIX 標準をサポートすることを目的としています。[15]その機能には、-ne テスト演算子と `[...]` テスト構文、"for ... in" コマンド、`$((...))` 演算構文、一般的な位置パラメータ構文、コマンド置換、およびエイリアス コマンドが含まれます。
OpenVMS - 初期リリース。[18]後からBashが含まれるようになりました。
1978
C シェル- 最初のリリース。バークレー在籍中にビル・ジョイが作成し、2BSD とともにリリースされました。「ビル・ジョイが C シェルに導入した便利な機能はコマンド履歴です。この機能は、以前に実行したコマンドの履歴を保持し、ユーザーが以前に実行したコマンドを確認して簡単に選択できるようにします。たとえば、コマンド履歴を入力すると、以前に実行したコマンドが表示されます。上下矢印キーを使用してコマンドを選択したり、!! を使用して以前のコマンドを実行したりできます。また、前のコマンドの引数を参照することもできます。たとえば、!* は前のコマンドのすべての引数を参照し、!$ は前のコマンドの最後の引数を参照します。」[15]「csh、tcsh、zsh、ash、scsh はすべて BSD または BSD ライクなライセンスの下でリリースされています。」
1983
TENEX C シェルは、「コマンドライン編集機能に加えて、ファイル名とコマンドの補完機能を導入しました。tcshはカーネギーメロン大学の Ken Greer によって開発されました。」[15] tcshでは、シェバンまたはハッシュバン記号が使用できました。また、argv[1] を含む argv 配列などの位置パラメータ、argv[0] としての $0 シェル変数、インデックス数パラメータ拡張 $#var、ディレクトリと実行可能性テストに関するテスト構文の -d 演算子と -x 演算子、! 否定記号、foreach コマンドのループ構造、set、echo、exit コマンド、変数割り当てと算術コンテキスト "@ count = $count + 1"、およびおなじみの二重引用符ルールも使用できました。
Novell NetWare - 最初のリリース。後から Bash が含まれるようになりました。
1984
「IEEE POSIXの作業は、当時のUNIXの2つのバリエーションであるバージョン6とBSD(バークレー)の標準を構築するために/usr/group組織で開始された作業の成果として1984年に始まりました。」[19]
1986
「POSIX」として知られるようになる文書は、IEEEによる試験的な標準として始まりました。一部の人々からは事実上の標準と見なされています。[20]
1988
1988年1月10日 -リチャード・ストールマンが前任の開発者の進歩のなさに不満を抱いた後、ブライアン・フォックスがBash [21]のコーディングを開始した。 [7]ストールマンとFSFは、既存のシェルスクリプトを実行できるフリーシェルはBSDとGNUのコードから構築された完全にフリーなシステムにとって非常に重要であると考え、彼らが自ら資金提供した数少ないプロジェクトの1つとなった。フォックスはFSFの従業員としてこの作業を引き受けた。[7] [22]
「IEEE Std 1003 の最初のバージョンは 1988 年に「IEEE IX」という参照名で発行されました」が、これらの標準では「コマンド インタープリタ」や「シェルとユーティリティ」の要件は後になってから指定されました。「リチャード ストールマンの提案により、これは「ポータブル オペレーティング システム インターフェイス」の略称である POSIX に変更されました。」[19] [23] POSIX「インターフェイスにより、アプリケーション作成者はポータブル アプリケーションを作成できます。この目標を念頭に置いて開発されました。」[24]
1989
1989年5月30日、ケネス・アルムクイストの灰殻 - 最初の放出。[25]
1989年6月8日、FoxはBashのベータ版、バージョン0.99をリリースしました。[9]。ライセンスはGPL-1.0以降でした。「スクリプトの下位互換性のサポートに加えて、BashはKornシェルとCシェルの機能を組み込んでいます。コマンド履歴、コマンドライン編集、ディレクトリスタック(pushdとpopd)、多くの便利な環境変数、コマンド補完などがあります。」[15]最終的には「正規表現(Perlに類似)と連想配列」をサポートしました。
1989 NOS、DJGPPプロジェクト経由のMicrosoft/IBM DOS - 最初のリリース。
1992
POSIX.2: シェルとユーティリティ (IEEE Std 1003.2-1992) が公開されました。
ブライアン・フォックスは1992年半ば[26]から1994年半ばまでの間、主要なメンテナーを務めた。 [27] [28]その後、彼の責任は別の初期の貢献者であるチェット・ラメイに移った。[29] [30] [31] [32] [33]それ以来、BashはFedora、Debian、openSUSEなどの主要なGNU/Linuxディストリビューションだけでなく、それらの派生版や競合製品でも最も人気のあるデフォルトの対話型シェルとなった。[34] [35]
1992
「(POSIX)ポータブル文字セットの最初の8つのエントリは、ISO/IEC 6429:1992標準で定義されています。」これらは、ヌル、アラート、バックスペース、タブ、キャリッジリターン、改行、垂直タブ、フォームフィードです。[36]
1994
1994年1月26日 - Debian - 最初のリリース。Bashはデフォルトの対話型および非対話型シェルです。[37]
1995
Cygwin - 最初のリリース。
BeOS - 最初のリリース。[38] [39]
1996
Chet Ramey は 1996 年 12 月 31 日に bash 2.0 をリリースしました。ライセンスは GPL-2.0 以降でした。
1997
bash 2.01 がリリースされました。
Almquist シェル、ash、Herbert Xu によって NetBSD から Debian に移植されました。
1998
bash 2.02 がリリースされました。
1998
MinGW (32 ビット) - 最初のリリース。
IEEE、Open Group、ISO/IECの標準化委員会のグループがSingle UNIX仕様v3の策定に着手し、オースティン・グループとして知られるようになった。シェルとユーティリティの技術標準はThe Open Group Base Specifications、Issue 6で作成され、それ自体がSingle UNIX仕様v3の一部となっている。[40]彼らの作業の焦点は、既存のアプリケーションコードへの変更を最小限に抑えながら、業界と学術界で実証されている実践を「単一の文書にまとめる」ことだった。[24]
1999
bash 2.03 がリリースされました。
2000
bash 2.04 がリリースされました。
Korn シェルは、Common Public License に基づいてオープン ソースとしてリリースされています。
POSIXポータブル文字セットの「残りの文字」は「ISO/IEC 10646-1:2000標準で定義されています。」これらは、米国のQWERTYキーボードの<スペース>から<チルダ>までの残りの文字を構成します。[36]
BeOS - 最終リリース
Darwin OS - 最初のリリース。利用可能なシェルの1つはBashです。[15]
2001
bash 2.05 がリリースされました。
POSIX-2001標準が発行され、「コマンドとユーティリティ」セクションが含まれています。オースティングループとSingle Unix仕様が関与しています。[40]
2002
俳句- 最初のリリース。[41]
2002 年 9 月 - Debian では、ash のバージョン 0.4.1 が dash に名前が変更されました。
2003
BashはOS X 10.3 PantherからAppleのオペレーティングシステムのデフォルトシェルとなったが[42]、OS X 10.2 Jaguarでも利用可能であった。
POSIX-2003 シェルおよびユーティリティ標準が IEEE によって公開されました。「これは、必須のシェルおよびユーティリティ関連機能のコンポーネント製品標準です。」POSIX 認定プログラムが存在します。[43]
2004
bash 3.0 がリリースされました。
POSIX-2004が発行される。[44]
2005
bash 3.1 がリリースされました。
Mingw-w64と、最近では
2006
bash 3.2 がリリースされました。ライセンスは GPL-2.0 以降です。
Ubuntu は dash をデフォルトのシェルとして採用しています。
2008
POSIX-2008はIEEEによってリリースされました。「この標準は、シェルスクリプトを含むアプリケーションプログラムに必要なシェルおよびユーティリティ機能への標準ソースレベルインターフェイスを定義します。」[43]
2009
bash 4.0 および 4.1 がリリースされました。ライセンスは GPL-3.0 以降です。
Novell Netware - 最終リリース
2011
bash 4.2 リリース
2011 年 2 月 6 日 - Debian Lenny がリリースされ、Bash がデフォルトの対話型シェルとして、dash がデフォルトの非対話型シェルとして採用されました。[37]「Dash には対話型シェルに期待される多くの機能が欠けており、Bash よりも高速でメモリ効率に優れています。」
2013
POSIX-2013はIEEEによってリリースされました。[45]
2014
bash 4.3 リリース
2014 年 9 月 - ShellShock。バグが特定された直後に、バグを修正するパッチが利用可能になりました。
2015
Termuxやその他の端末エミュレーション アプリケーションは、Android上で Bash を利用できるようにします。
2016
POSIX-2016はIEEEによってリリースされました。[46]
bash 4.4 がリリースされました。
BashはWindows Subsystem for Linux [47] [48]を介し てMicrosoft Windowsに移植されました。
2017
POSIX標準の新しいバージョンがリリースされました。[43]
現在Bashを搭載している他のオペレーティングシステムとしては、ArcaOSなどがある。[49]
2018
2018年1月31日 - IEEEはPOSIX 2017標準を公開した。[50]
AppleはmacOS Mojave(2018年頃)までBashをデフォルトの対話型シェルとしてパッケージ化していました。しかし、Catalina [51](2019年頃)での明確なライセンス上の理由から、AppleはデフォルトのシェルであるBashバージョン3.2(2006年頃)をZ Shellバージョン5.7(2019年頃)に置き換えました。[52] [53] [54]「macOSにバンドルされているbashバイナリは、長い間バージョン3.2のままです。bash v4は2009年にリリースされ、bash v5は2019年1月にリリースされました。Appleがこれらの新しいバージョンに切り替えていないのは、GPL v3でライセンスされているためです。bash v3はまだGPL v2です。」[51] Zshはより寛容なライセンスを使用しています。
2019
bash 5.0 リリース
2020
リリース2020.4では、Kali Linuxはデスクトップイメージのデフォルトシェルとしてzshに切り替えましたが、ARM、コンテナ、NetHunter、WSLイメージでは引き続きBashを使用しています。[55]
bash 5.1 リリース
2022
bash 5.2 リリース
「2022年の時点で、サーバー、クラウドコンピューティングセンター、高性能コンピューター、Appleシステム(当初はBSDのバリエーション)、多くの携帯電話システムに、POSIX互換または影響を受けたシステムが多数存在しています。デバイスの数は数十億に上ります。」[19]
2024
2024 年 6 月 14 日 - POSIX-2024 が IEEE によって公開されました。
bash 5.3 がリリースされました。
特徴
短い説明のリスト
コマンド プロセッサとして、Bash はテキスト ウィンドウ内で動作し、ユーザーはこのウィンドウにコマンドを入力してさまざまなタスクを実行します。また、シェル スクリプトと呼ばれるファイルからのコマンドの実行もサポートしており、自動化を容易にします。Unixシェルの規則に従って、Bash には次のような豊富な機能が組み込まれています。
- GNU プロジェクトが提供するユーザー マニュアルは からも入手できます
info bash。また、技術マニュアルは からも入手できますman bash。 - 呼び出しとして...
- インタラクティブシェル、
- 非対話型シェル、または
- ログインシェル;
- コマンドラインインターフェース;
- 終了ステータスコード。
- 制御構造
- ファイル属性、文字列、整数値などのブールテストの構文:
- 伝統的な
test命令、 - 従来のシングルブラケットテスト:
[、 - 最新のダブルブラケットテスト:
[[ ... ]]高度な機能が含まれています:- 拡張正規表現とextglobマッチング
<およびを使用した辞書式ソート>;
- 伝統的な
- UNIXスタイルのパイプライン:
|; - サブシェル:
( ... ); - 組み込みを使用したプロセス間通信の手段としてのシグナリング
trap。 - 非同期実行、つまりジョブとジョブ制御:
job_spec &次のいずれかjob_specになります。- 完全なコマンドライン:
<command_name> <options> <operands> <arguments> &、または - 先頭のパーセント記号で表されるジョブ制御識別子:
%1 &;
- 完全なコマンドライン:
- コマンドラインをPOSIX標準に準拠して解釈できるシェル移植性モード。
- コマンド解析:
- コメントは無視されます:
- ボーンスタイルの
#ハッシュタグコメント、そして - トンプソンスタイルの
:コロンコメント。
- ボーンスタイルの
- コマンドは 1 行ずつ解析されます。
- 制御構造は尊重され、
\行末ではバックスラッシュエスケープも有効です。
- 引用規則
に従って単語に分割する(つまり単語分割)、
- ANSI-C 引用符を含む
$'...';
- ANSI-C 引用符を含む
- 結果の文字列に対して、次の順序で 7 種類の拡張が実行されます。
- (ステップ1)ブレース拡張
kernel{-headers}、 - (ステップ2)チルダ展開
~、 - (ステップ3) 左から右へ:
- (ステップ4)単語の分割(再度)、
- (ステップ5)パス名の拡張、つまり、、、、およびを
使用したシェルスタイルのグロビングとパターンマッチング
*?[...]- (組み合わせて使用することもできますが、パターン マッチングでの括弧の使用、
[...]およびテスト コマンドでの括弧の使用は、[それぞれ[[ ... ]]異なるものです。)
- (組み合わせて使用することもできますが、パターン マッチングでの括弧の使用、
- 引用の削除;
- (ステップ1)ブレース拡張
- 標準入力、標準出力、標準エラーデータストリームのリダイレクトが実行されます。これには以下が含まれます。
- ファイルの書き込み、、
>および追加>>、、 - ここでは、、、の文書を記載します
<<。 <<<ここでは、パラメータを入力として使用できるようにする文字列、および>|シェルの「noclobber」設定が有効な場合にファイルの上書きを強制できるリダイレクト演算子。
- ファイルの書き込み、、
- コマンド名の検索は次の順序で実行されます。
- シェル内部のコマンド:
- シェルエイリアス、
- シェルの予約語、
- シェル関数、および
- シェル組み込みコマンド;
- シェル外部のコマンド:
- または、などのUNIXスタイルのプログラムを分離する
lsln - シェル スクリプトは、実行可能なコマンドを含むファイルです。(シェル スクリプトは実行前にコンパイルする必要がなく、特定の要件が満たされている場合は、ファイル名を使用してコマンドとして呼び出すことができます。)
- または、などのUNIXスタイルのプログラムを分離する
- シェル内部のコマンド:
- 結果の文字列はコマンドとして実行されます。
- コメントは無視されます:
Bash では、次の機能も提供されます...
- 設定可能な実行環境: [56]
- シェルの動作を変更する設定 (
set組み込み) とシェル オプション (shopt組み込み)。 - 対話型呼び出しのみの場合、
- 無制限のサイズのコマンド履歴、
- ディレクトリスタック(
pushdおよびpopd組み込みを参照)、 - タブ補完、
- 設定可能なプロンプト、および
- GNU readlineを使用したコマンドライン編集;
- デバッグ目的の軽量ログ(xtrace) およびその他の軽量デバッグ オプション (errexit、noexec、nounset、pipefail など)。
- シェル互換モード: bash 5.1 は bash 4.2 のように動作できます。
- ドキュメント:
- 非公式のサポート手段:
- libera.chat の IRC #bash
- メーリングリストは https://www.gnu.org/software/bash/ にあります
一般的な議論
Bashコマンド構文は、Bourne シェルのコマンド構文のスーパーセットです。Bash は、 bash 2.05a [61] [62] 以降、中括弧の展開、[57] コマンドライン補完 (プログラマブル補完)、[58] 基本的なデバッグ [59] [60]およびシグナル処理 (を使用)などの機能をサポートしています。Bash は、Bash で異なって解釈される周辺的な構文動作に遭遇したり、新しい Bash 組み込みコマンドに一致するシステムコマンドを実行しようとしたりする場合を除いて、ほとんどの Bourne シェルスクリプトを変更せずに実行できます。Bash コマンド構文には、コマンドライン編集、コマンド履歴(コマンド) [63]ディレクトリスタック、および変数、POSIXコマンド置換構文など、 Korn シェル(ksh) およびC シェル(csh)から取り入れたアイデアが取り入れられています。
traphistory$RANDOM$PPID$(...)
ユーザーが対話型コマンドシェル内でタブキーを押すと、ベータバージョン2.04以降、 Bashはコマンドライン補完を自動的に使用して、部分的に入力されたプログラム名、ファイル名、変数名を一致させます。Bashのコマンドライン補完システムは非常に柔軟でカスタマイズ可能であり、特定のプログラムやタスクの引数やファイル名を補完する関数がパッケージ化されていることがよくあります。
Bash の構文には、Bourne シェルにはない多くの拡張機能があります。Bash は、外部プロセスを生成せずに整数計算 (「算術評価」) を実行できます。この目的のために、((...))コマンドと$((...))変数の構文を使用します。その構文は、I/O リダイレクトを簡素化します。たとえば、演算子を使用して、標準出力(stdout) と標準エラー(stderr) を同時にリダイレクトできます&>。これは、Bourne シェルの同等の ' command > file 2>&1' よりも簡単に入力できます。Bash は、および構文を使用したプロセス置換をサポートしています。この構文は、通常ファイル名が使用されるコマンドの出力 (またはコマンドへの入力) を置き換えます。(これは、それをサポートするシステムでは/proc/fd/の名前なしパイプを介して、または必要に応じて一時的な名前付きパイプを介して実装されます)。
<(command)>(command)
'function' キーワードを使用する場合、Bash 関数宣言は Bourne/Korn/POSIX スクリプトと互換性がありません (KornShell は 'function' を使用する場合に同じ問題を抱えています)。しかし、Bash は Bourne シェルや Korn シェルと同じ関数宣言構文を受け入れ、POSIX に準拠しています。これらの違いやその他の違いにより、Bash シェル スクリプトは、意図的に互換性を考慮して作成されない限り、Bourne シェルまたは Korn シェル インタプリタで実行できることはほとんどありません。これは、Linux が普及するにつれて一般的ではなくなってきています。しかし、POSIX モードでは、Bash は POSIX にさらに準拠しています。[65]
Bash はhere ドキュメントをサポートしています。バージョン 2.05b 以降、Bash は演算子を使用して「here 文字列」から標準入力<<<(stdin) をリダイレクトできます。
Bash 3.0はPerlを彷彿とさせる構文を使用したインプロセス正規表現マッチングをサポートしています。[66]
2009年2月、[67] Bash 4.0は連想配列のサポートを導入しました。[68]連想配列のインデックスはAWKやTclと同様の文字列です。[69]多次元配列をエミュレートするために使用できます。Bash 4ではライセンスもGPL-3.0以降に変更されました。[70] [71]
ブレース拡張
括弧展開は代替とも呼ばれ、C シェルからコピーされた機能です。代替の組み合わせのセットを生成します。生成された結果はファイルとして存在する必要がありません。展開された各文字列の結果はソートされず、左から右の順序が保持されます。
$ 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 シェルは同じ出力を生成しない ため、ユーザーはポータブル シェル スクリプトで中括弧展開を使用しないでください。
$ # bash シェル
$ /bin/bash -c 'echo a{p,c,d,b}e' ape ace ade abe $ # 従来のシェルは同じ出力を生成しません$ /bin/sh -c 'echo a{p,c,d,b}e' a{p,c,d,b}e
括弧の展開をワイルドカードと組み合わせると、最初に括弧が展開され、次に結果として得られるワイルドカードが通常どおり置換されます。したがって、現在のディレクトリにある JPEG および PNG 画像の一覧は、次のようにして取得できます。
ls *. { jpg,jpeg,png } # *.jpg *.jpeg *.png に展開されます - その後、# ワイルドカードが処理されますecho *. { png,jp { e, } g } # echo は展開のみを表示します - # 中括弧内の中括弧も可能です。
交替に加えて、中括弧の展開は、二重ドットで区切られた 2 つの整数または文字間の連続した範囲に使用できます。Bash の新しいバージョンでは、3 番目の整数を使用して増分を指定できます。
$ echo { 1 ..10 } 1 2 3 4 5 6 7 8 9 10 $ echo { 01 ..10 } 01 02 03 04 05 06 07 08 09 10 $ echoファイル{ 1 ..4 } .txt
ファイル1.txt ファイル2.txt ファイル3.txt ファイル4.txt $ echo { a..e } abcde $ echo { 1 ..10..3 } 1 4 7 10 $ echo { a..j..3 } adgj
括弧展開が変数展開 (別名、パラメータ展開およびパラメータ置換)と組み合わされている場合、変数展開は括弧展開の後にeval実行されます。そのため、場合によっては組み込みの使用が必要になることがあります。
$ start = 1 ; end = 10 $ echo { $start .. $end } # 評価順序{1..10}のため展開に失敗$ eval echo { $start .. $end } # 変数の展開が行われ、結果の文字列が評価されます1 2 3 4 5 6 7 8 9 10
起動スクリプト
Bash が起動すると、さまざまなドット ファイル内のコマンドが実行されます。Bash シェル スクリプトとは異なり、ドット ファイルでは通常、実行権限が有効になっておらず、のようなインタープリタ ディレクティブも#!/bin/bash存在しません。
レガシー互換の Bash 起動例
以下の例は~/.bash_profileBourne シェルと互換性があり、 および に関して csh と同様のセマンティクスを提供します~/.bashrc。~/.bash_loginは、ファイル名が存在し、読み取り可能であるかどうかをテストする短絡評価であり、存在しない場合は の
後の部分をスキップします。[ -r filename ] && cmd&&
[ -r ~/.profile ] && . ~/.profile # 環境を一度だけ設定します。Bourne-sh 構文のみif [ -n " $PS1 " ] ; then # 対話型ですか? [ -r ~/.bashrc ] && . ~/.bashrc # 対話型シェルの tty/プロンプト/関数の設定[ -r ~/.bash_login ] && . ~/.bash_login # ログイン シェルのみのログイン時のタスクfi # "if" ブロックの終了
Bash 起動時のオペレーティング システムの問題
UnixおよびLinuxの一部のバージョンには、通常/etcディレクトリの下に Bash システム起動スクリプトが含まれています。Bash はこれらのファイルを標準の初期化の一部として実行しますが、他の起動ファイルは、文書化された Bash 起動シーケンスとは異なる順序でそれらを読み込むことができます。ルート ユーザーのファイルのデフォルトの内容にも問題がある可能性があり、セットアップ時にシステムが新しいユーザー アカウントに提供するスケルトン ファイルにも問題がある可能性があります。Xウィンドウ システムを起動する起動スクリプトは、ウィンドウ マネージャーを起動する前にユーザー環境変数を設定しようとして、ユーザーの Bash 起動スクリプトで予期しない動作を行う可能性もあります。これらの問題は、多くの場合、~/.xsessionまたは~/.xprofileファイルを使用して を読み取ることで解決できます。これは、 xtermやGnome Terminal~/.profileなどのウィンドウ マネージャーから生成された Bash シェル ウィンドウに必要な環境変数を提供します。
ポータビリティ
オプション付きでBashを起動する--posixか、set -o posixスクリプトで を記述すると、BashはPOSIX 1003.2標準に非常に厳密に準拠するようになります。[72]移植性を目的としたBashシェルスクリプトは、少なくともPOSIXシェル標準を考慮する必要があります。POSIXにはないbashの機能は次のとおりです。[72] [73]
- 特定の拡張呼び出しオプション
- ブレース拡張
- 配列と連想配列
- 二重括弧
[[...]]拡張テスト構造とその正規表現マッチング - 二重括弧による算術評価構造(
(( ... ));のみが$(( ... ))POSIX です) - パラメータ展開における特定の文字列操作
localスコープ付き変数の場合- プロセス置換
- Bash固有の組み込み関数
- コプロセス
- $EPOCHSECONDSと$EPOCHREALTIME変数[74]
コードの一部がそのような機能を使用すると、それは「バシズム」と呼ばれ、移植性に問題があります。Debiancheckbashismsと Vidar Holen のポリシーshellcheckを使用すると、スクリプトにこれらの部分が含まれないようにすることができます。[75] [76]リストは実際のターゲット シェルによって異なります。Debian のポリシーでは、スクリプト内でいくつかの拡張機能が許可されています ( dashシェルの場合と同様)。[73]一方、 autoconfのような POSIX 以前の Bourne シェルをサポートしようとするスクリプトではconfigure、使用できる機能がさらに制限されます。[77]
キーボードショートカット
Bashは GNU Readlineを使用して 、デフォルトの(Emacs)キーバインディングを使用したコマンドライン編集用のキーボードショートカットを提供します。Vi バインディングは、を実行することで有効にできますset -o vi。[78]
プロセス管理(ジョブ制御)
Bash シェルには、バッチ (非同期) と同時実行 (同期) の 2 つのコマンド実行モードがあります。
コマンドをバッチモード(つまり、順番に)で実行するには、コマンドを「;」文字で区切るか、別の行に記述する必要があります。
コマンド1 ; コマンド2
コマンド3
この例では、コマンド 1 が終了するとコマンド 2 が実行され、コマンド 2 が完了するとコマンド 3 が実行されます。
実行コマンドの最後に (シンボル &) を使用すると、command1 のバックグラウンド実行が可能になります。この場合、プロセスはバックグラウンドで実行され、制御はすぐにシェルに戻され、コマンドの実行を継続できます。
コマンド1 &
または、command1 と command2 を同時に実行するには、次のように Bash シェルで実行する必要があります。
コマンド1とコマンド2
この場合、command1 はバックグラウンド&シンボルで実行され、フォアグラウンドで command2 を実行するシェルにすぐに制御が返されます。
プロセスがフォアグラウンドで実行されているときにCtrl+を入力すると、プロセスを停止して制御をbashに戻すことができます。 [79]z
バックグラウンドと停止中のすべてのプロセスのリストは、次のコマンドを実行することで取得できますjobs。
$ jobs
[1]- 実行中のコマンド1 &
[2]+ 停止したコマンド2
出力では、括弧内の数字はジョブ ID を示します。プラス記号は、bgおよびのデフォルト プロセスを示しますfg。テキスト「実行中」および「停止」は、プロセスの状態を示します。最後の文字列は、プロセスを開始したコマンドです。
プロセスの状態は、さまざまなコマンドを使用して変更できます。fgコマンドはプロセスをフォアグラウンドに表示し、 はbg停止したプロセスをバックグラウンドで実行するように設定します。 および はbg、fg最初の引数としてジョブ ID を受け取り、処理するプロセスを指定できます。 ジョブ ID を指定しない場合は、 の出力でプラス記号で識別されるデフォルトのプロセスが使用されますjobs。コマンドを使用して、シグナルkillを送信することにより、プロセスを途中で終了できます。ジョブ ID はパーセント記号の後に指定する必要があります。
%1 を
殺す条件付き実行
Bash は、先行コマンドによって設定された終了コードに応じてコマンドを実行する「条件付き実行」コマンド セパレータを提供します。例:
cd " $SOMEWHERE " && ./do_something || echo "エラーが発生しました" > & 2
ここで、./do_somethingは、 cd (ディレクトリの変更) コマンドが「成功」した (終了ステータスがゼロを返した)場合にのみ実行され、 echoコマンドは、 cdまたは./do_somethingコマンドのいずれかが「エラー」を返した (終了ステータスがゼロ以外) 場合にのみ実行されます。
すべてのコマンドの終了ステータスは特殊変数 に格納されます$?。Bash は条件付きコマンド評価の形式
もサポートしています。if ...;then ...;else ...;ficase $VARIABLE in $pattern)...;;$other_pattern)...;; esac
プログラム可能な完了
Bashは組み込みの、、コマンドを介してプログラム可能な補完をサポートしています。[80]この機能は2000年にリリースされた2.04のベータ版から利用可能でした。[81] [82]これらのコマンドは、コマンド(つまり、インストールされているプログラム)、関数、変数、ファイル名の複雑でインテリジェントな補完指定を可能にします。[83]completecompoptcompgen
とcompleteの2つのコマンドは、使用可能なコマンドやオプションの引数がreadlinecompopt入力にどのように表示されるかを指定します。バージョン5.1では、コマンドやオプションの補完は通常、その名前を入力した後にキーを押すことで有効になります。[83]Tab ↹
ドキュメント
bashのベースとなる標準として、POSIX標準、またはIEEE Std 1003.1、[84]以降が特に参考になります。
Linuxの「manページ」[85] [86]は、の動作を理解するための権威ある技術解説文書となることを目指していますbash。通常は、 を実行することでアクセスできますman bash。
GNU マニュアルは、読みやすくユーザーフレンドリーであると考えられることがあります。「... を実行するか、システム上の、 、または同様のディレクトリinfo bashを調べることで、Bash に関する情報を見つけることもできます。 を実行すると、簡単な概要が表示されます。[87]」
/usr/share/doc/bash//usr/local/share/doc/bash/bash --help
最近の Linux では、 bash がインストールされているターミナル プロンプトでhelp, help [built-in name]またはを実行すると、シェル組み込みコマンドに関する情報が表示されます。 、、、、または などの一部のコマンドは、システムとローカルにインストールされているbash のバージョンに応じて、シェル組み込みまたはシステム バイナリ実行可能ファイルのいずれかを参照できます。これらのコマンド名の衝突のいずれかが発生すると、bash はデフォルトで、シェル組み込みを使用して特定のコマンド ラインを実行します。バイナリ実行可能ファイルの絶対パス (つまり ) を指定することは、シェルがシステム バイナリを使用するようにするための 1 つの方法です。この名前の衝突の問題は、およびを使用して表示される「ヘルプの概要」にも影響します。同じ名前のシェル組み込みおよびシステム バイナリ実行可能ファイルには、多くの場合、異なるオプションがあります。
man builtinsechofalsekillprintftesttrue/bin/printfkill --help/bin/kill --help
「プロジェクトの管理者は、よくある質問を含むBashページも持っています」[88] [89] [87]このFAQはbashバージョン5.1時点で最新のものであり、更新されなくなりました。
セキュリティと脆弱性
ルートスクリプト
シェル スクリプトを root ユーザーとして実行することは、長年にわたってセキュリティ上良くない行為として広く批判されてきました。よく挙げられる理由の 1 つは、スクリプトを root として実行すると、スクリプト内のバグの悪影響が root の昇格された権限によって拡大されるということです。
よくある例: スクリプトにコマンド が含まれていますrm -rf ${dir}/が、変数$dirが未定義のままになっています。Linux では、スクリプトが一般ユーザーによって実行された場合、シェルはrm -rf /一般ユーザーとしてコマンドを実行しようとし、コマンドは失敗します。ただし、スクリプトが root ユーザーによって実行された場合、コマンドは成功し、ファイルシステムが消去される可能性があります。
sudo代わりにコマンドごとに
使用することをお勧めします。
デバッグ
- POSIX で規定されたシェルの機能:
- パラメータ拡張: [90] [91] [92]
${parameter:?[word]}: 「Null または Unset の場合はエラーを示します。 の展開[word](エラー メッセージまたは行番号など) が STDERR に書き込まれ、シェルはゼロ以外の終了コードで終了します。」
- 特殊パラメータ: [93] [94]
$?「10 進数の終了ステータスの最短表現に展開します。」$$「呼び出されたシェルの 10 進プロセス ID の最短表現に展開されます。」
- 特別内蔵ユーティリティ
set: [95] [96] [97]set -x、または XTrace は、シェルの主なデバッグ手段です。これは、「コマンドを展開した後、実行する前に、各コマンドのトレースを標準エラーに書き込みます。」set -v、または詳細モードでは、「読み取られた入力を標準エラーに書き込みます。」set -o pipefail: 「パイプラインの終了ステータスを、最後の (右端の) コマンドだけでなく、パイプライン内のすべてのコマンドの終了ステータスから取得します。」set -u、または NoUnset を有効にすると、未設定の変数展開に遭遇したときにシェルがエラー メッセージを表示して終了します。これを使用すると、直感に反する落とし穴がいくつかあります。set -e、または ErrExit は、有効にすると、特定の条件下で、シェルがゼロ以外の終了コードを受け取るたびにエラー メッセージなしでシェルを終了する設定です。その使用は、あまり知られていないコンピュータ プログラムであれば何でも議論の余地があると考えられるほど、多少議論を呼んでいます。支持者は、シェル スクリプトが「失敗してはならない」状況で ErrExit が検証可能性を保証すると主張しています。しかし、反対派は、その使用は信頼性が低く、一見単純で、非常に直感に反し、落とし穴や落とし穴が満ちており、本質的に「セキュリティ シアター」であると主張しています。Bash の多くの開発者は、この特定の設定の使用を強く推奨していません。
- 特別な組み込みユーティリティ
trap [-lp] [arg] [sigspec …]: [98] [96] :- EXIT、: 「
[sigspec](シグナル指定子)が 0 または EXIT の場合、[arg]シェルの終了時に実行されます。」
- EXIT、: 「
- ユーティリティ
printf: 変数の内容を確実に印刷する手段:
- パラメータ拡張: [90] [91] [92]
- POSIX で指定されていない Bash の機能:
- Bash変数: [99] [100]
$BASHPID: [101]「現在のbashプロセスのプロセスIDに展開されます。」${BASH_ARGC[@]}: [102]「現在のbash実行呼び出しスタックの各フレーム内のパラメータの数を値とする配列変数。」${BASH_ARGV[@]}: [103]「現在のbash実行呼び出しスタック内のすべてのパラメータを含む配列変数。」${BASH_LINENO[@]}: [104]「FUNCNAMEの各対応するメンバーが呼び出されたソースファイル内の行番号をメンバーとする配列変数。」${BASH_REMATCH[@]}: [105]「=~二項演算子によって[[条件コマンドに割り当てられる配列変数。」$BASH_SOURCE: [106]「FUNCNAME配列変数内の対応するシェル関数名が定義されているソースファイル名をメンバーとする配列変数。」$BASH_XTRACEFD: [107]「有効なファイル記述子に対応する整数に設定すると、Bash は 'set -x' が有効になっているときに生成されたトレース出力をそのファイル記述子に書き込みます。」$EPOCHREALTIME: [108]「このパラメータが参照されるたびに、Unixエポック(time(3)を参照)からの秒数がマイクロ秒単位の浮動小数点値として展開されます。」${FUNCNAME[@]}: [109]「現在実行呼び出しスタックにあるすべてのシェル関数の名前を含む配列変数。」$LINENO: [110]「このパラメータが参照されるたびに、シェルはスクリプトまたは関数内の現在の連続行番号(1から始まる)を表す10進数を置き換えます。」${PIPESTATUS[@]}: [111]「最後に実行されたフォアグラウンドパイプライン内のプロセスからの終了ステータス値のリストを含む配列変数(単一のコマンドのみを含む場合があります)。」$PPID: [112]「シェルの親のプロセスID。」$PS4: [113]「このパラメータの値はPS1と同様に展開され、実行トレース中にbashが各コマンドを表示する前に値が印刷されます。」
- シェル組み込み
set: [95] [96] [97]set -r、または制限モードは、マシンに物理的にアクセスできる悪意のある人間から個々のシェル インスタンスのセキュリティを強化することを目的としています。脅威モデルが変化したため、このモードは以前ほど一般的に使用されなくなりました。
- シェル組み込み
shopt: [114] [96]shopt -s extdebug: 「デバッガーによる使用を目的とした動作です。」
- シェル組み込み
trap [-lp] [arg] [sigspec …]: [98] [96] : POSIXではtrap組み込みの特定の用途を指定していますが、次のシグナル仕様はBashの拡張です。- DEBUG: 「sigspec が DEBUG の場合、コマンド arg は特定の種類のコマンドの前に実行されます」。
- ERR: 「sigspec が ERR の場合、コマンド arg は常に実行されます...」特定の種類のコマンドは「ゼロ以外の終了ステータスを返します」が、ErrExit と同様の制限が適用されます。
- RETURN: 「sigspec が RETURN の場合、シェル関数または または組み込み関数を使用して実行されたスクリプトの実行が完了するたびに、コマンド arg が実行されます
.。source」
- Bash変数: [99] [100]
- サードパーティのデバッグユーティリティ:
- ShellCheck: シェルスクリプト解析ツール; [115] [76] [116]
- devscripts-checkbashisms: /bin/shスクリプトに一般的なbash固有の構造が含まれているかどうかを確認します。[117] [75]
- kcov: 特別なコンパイルオプションのないコードカバレッジツール。[118]
- Bashdb: Bashシンボリックデバッガー。[119] [120]
例
パラメータ展開により:?、未設定または null 変数によってスクリプトが停止する可能性があります。
- 例:
#!/bin/bash bar = "fooは定義されていません" echo " ${ foo :? $bar } " echoこのメッセージは印刷 されません
$ ./ex.sh ./ex.sh: 行 3: foo: foo は定義されていません
最初にスペースと改行を含む配列の内容を移植可能な構文で確実に印刷し、次に同じものを Bash で印刷します。Bash では、改行の前のスペースの数が明確に示されることに注意してください。
$ # POSIXシェルの場合: $ array =( "a " " b" " > c " ) $ printf ',%s,\n' " ${ array [@] } " ,a , , b, , c ,
# Bashの場合: declare -p array を宣言します。declare -a array =([ 0 ]= "a " [ 1 ]= " b" [ 2 ]= $' \nc ' )
問題が発生した場合にエラーメッセージを印刷します。
- エラー.sh
if ! lsblk | grep sdb then echoエラー、行$LINENO fi
$ ./error.sh エラー、行 130
xtrace を使用します。errexit が有効になっている場合は、echo quux実行されませんでした。
- テスト
#!/bin/bash set -x foo = bar ; echo $foo false echo quux
$ ./test.sh + foo=bar + echo bar bar + false + echo quux quux
非推奨の構文
- バックティック形式のコマンド置換:
`...`は非推奨となり、代わりに$(...);が使用されます。
test/[/コマンドでの -a または -o の使用[[、- たとえば、
[ -r ./file -a ! -l ./file ]は非推奨となり、 が推奨されます[ -r ./file ] && ! [ -l ./file ]。
- たとえば、
- 算術構文の使用は
$[...]非推奨となり、代わりに$((...))または((...))が適宜使用されます。
exprまたはの使用let。
シェルショック
2014年9月、このプログラムにセキュリティ上のバグが発見された[121] 。これは「シェルショック」と呼ばれた。公開されたことで、すぐにインターネット上でさまざまな攻撃が行われた。[122] [123] [124]
この脆弱性を悪用すると、特定のバージョンのBashで実行可能なCGIスクリプトで任意のコードが実行される可能性がある。このバグは、Bashが関数定義を環境変数を介してサブシェルに渡す方法に関係していた。[125]このバグは1989年8月(バージョン1.03)からソースコードに存在しており[126]、2014年9月に修正された(バージョン4.3)。
バグが特定された直後に、バグを修正するパッチが利用可能になりました。最新バージョンにアップグレードすることを強くお勧めします。
この脆弱性には、共通脆弱性識別子 CVE -2014-6271、CVE-2014-6277、CVE-2014-7169 などが割り当てられています。CVSS Metrics 2.x および 3.x では、このバグはそれぞれ「高」および「重大」とみなされています。
バグ報告
bashbugと呼ばれる外部コマンドは、Bash シェルのバグを報告します。このコマンドが呼び出されると、ユーザーのデフォルトのエディタが開き、入力フォームが表示されます。フォームは Bash のメンテナー (またはオプションで他のメールアドレス) に送信されます。[127] [128]
バージョン
Windows 10およびWindows 11用のバージョンも、Windows Subsystem for Linux経由で利用可能です。[129] [130]また、 Solaris 11ではデフォルトのユーザーシェルとなっています。 [131] BashはBeOSでもデフォルトのシェルでした。[38]また、 Apple macOSのバージョン10.3(元々、デフォルトのシェルはtcsh)から10.15(macOS Catalina)では、デフォルトのシェルがzshに変更されましたが、[54] Bashは代替シェルとして引き続き利用可能です。[71]
リリース履歴
ライセンス
4.0以降: GPL-3.0以降[135]
1.11?から3.2: GPL-2.0以降[136]
0.99?から1.05?: GPL-1.0以降[137] [68] [138]
プログラム名
このプログラムの名前は、bashシェルに取って代わられたとされることもあるシェル プログラムの1 つを作成したStephen Bourneへの敬意から始まる比喩表現または気の利いた表現です。彼の名前は、出産のイメージをもじって使用されています。この語呂合わせには、ヒンズー教または仏教の輪廻転生の考え、キリスト教の慣用句「生まれ変わる」、またはより抽象的な再生の考えへの暗示が加えられているようです。キリスト教の新約聖書、ヨハネの福音書第 3 章の多数の英訳には「生まれ変わる」という言葉が含まれていますが、Merriam-Websterの辞書では「生まれ変わる」を「...新たな、または確約された誓約をした人... 」と定義しています。 [139]元の基準が何であったにせよ、最終的にこのプログラムは「Bourne Again SHell」という名前を受け取りました。[87] [140]
その名前の頭文字は「bash」で、「激しく打つ」という意味の言葉です。[141]コンピュータプログラミングの文脈では、コンピュータのキーボードなどを「激しく打つ」ことは、ある種のフラストレーションの誇張された イメージであると考えられます。このような否定的な感情のイメージは、「生まれ変わる」という考えと 直接対比されていると考えられます。
この命名は、言葉の皮肉[142]または偶発的なほのめかし[ 143]の一例と見なすことができます。bashの文法は当初、当時使用されていた最も人気のある Unix シェル プログラムの文法に基づいていましたが、そのうちのいくつかは、当時特に使いにくかったり、イライラさせられるものと考えられていました。年月が経つにつれて、bash の開発により文法はよりユーザーフレンドリーになり、 [144] [145] [146] [147] [148] [149] bash プロジェクトは、その使いやすさの向上に取り組んでいるようです。それ以来、bash はほとんどの Linux および Unix オペレーティング システムで事実上のデフォルト シェル プログラムになりました。
参照
Unix シェル
- アルムクイストシェル(トネリコ)
- ボーンシェル (sh)
- ビジーボックス
- C シェル (csh)
- Debian-Almquist シェル (ダッシュ)
- 魚のシェル: フレンドリーなインタラクティブシェル
- Google Shell (goosh) - Google 検索用の UNIX ライクなフロントエンド。
- Korn シェル (ksh)には多数のバリエーションがあります。
- nsh - 「fishのようなコマンドラインシェルですが、POSIX互換です。」Archで利用可能。[150]
- osh - 「Oil Shell は Bash 互換の UNIX コマンドライン シェルです。」Arch で利用可能です。
- Mashey または Programmer's Workbench シェル
- IBM i 用 Qshell
- プラン9からのrc
- rush - 制限付きユーザーシェル。Debianで利用可能。[37]
- 独立型シェル(サッシ)
- scsh - Scheme シェル。
- TENEX C シェル (tcsh)
- トンプソンシェル(TSH)
- おもちゃ箱
- yash - Yet Another Shell。「世界で最も POSIX に準拠したシェル」を目指しており、Arch で利用可能です。
- Z シェル (zsh)
参考文献
- ^ 「/gnu/bash のインデックス」 。2024年12 月 4 日閲覧。
- ^ 「フリーソフトウェア財団 — フリーソフトウェアのために協力 — フロントページ」。fsf.org 。 2024年5月19日閲覧。
フリーソフトウェア財団 (FSF) は、コンピューターユーザーの自由を促進することを世界的な使命とする非営利団体です。
- ^ 「GNU in a Nutshell」。gnu.org 。 2024年5月19日閲覧。
究極の目標は、コンピューターユーザーがやりたいことをすべて実行できるフリーソフトウェアを提供することであり、それによってプロプライエタリソフトウェアを過去のものにすることです。
- ^ 「GNU's Bulletin, vol. 1 no. 7, June, 1989 :: GNU's Who」。gnu.org 。 2024年5月19日閲覧。Brian
Foxは現在、BASH(「Bourne Again SHell」)と呼ばれるshのGNUバージョンを完成させました。
- ^ 「GNU ソフトウェア」。gnu.org。2024年5 月 19 日閲覧。GNU
は 100% フリーソフトウェアのオペレーティングシステムです。
- ^ 「Bourne shell」。ibm.com 。 2024年5月19日閲覧。Bourne
shellは対話型コマンドインタープリターおよびコマンドプログラミング言語です。
- ^ abc Richard Stallman (Chet Ramey のコメント付きで転送) (1988 年 2 月 10 日). 「GNU + BSD = ?」.ニュースグループ: comp.unix.questions. Usenet: 2362@mandrill.CWRU.Edu. 2021 年 12 月 28 日時点のオリジナルよりアーカイブ。 2021 年12 月 28 日閲覧。
1 年半の間、GNU シェルは「ほぼ完成」していました。作者は、自分がやったことを実現すると何度も約束しましたが、決してそれを守りませんでした。ついに、私は彼が何かを実現するとは信じられなくなりました。そこで、Foundation スタッフの Brian Fox が現在、Bourne シェルの模倣品を実装しています。
- ^ Hamilton, Naomi (2008年5月30日)、「The AZ of Programming Languages: BASH/Bourne-Again Shell」、Computerworld : 2、2011年7月6日時点のオリジナルよりアーカイブ、2011年3月21日閲覧、リチャード・ストールマンが、
当時は制約が多かったUnixシステムの完全な代替品を作ることを決めたとき、最終的にはすべての一般的なユーティリティ、特に標準シェルの代替品が必要になり、それらの代替品には適切なライセンスが必要になることはわかっていました。
注: オリジナルの computerworld.com.au リンクは無効です。オリジナルの資料のコピーも参照してください。- 、
- computerworld.com.au と
- サウスカロライナ大学。
- ^ ab Brian Fox (Leonard H. Tower Jr. によって転送) (1989 年 6 月 8 日). 「Bash がベータ版としてリリースされました!」.ニュースグループ: gnu.announce. 2013 年 5 月 4 日時点のオリジナルよりアーカイブ。 2010 年10 月 28 日閲覧。
- ^ “I Almost Get a Linux Editor and Compiler”. Dr. Dobb's . 2021年3月2日時点のオリジナルよりアーカイブ。 2020年9月12日閲覧。
- ^ リチャード・ストールマン(2010年11月12日). 「GNUプロジェクトについて」.フリーソフトウェア財団. 2011年4月24日時点のオリジナルよりアーカイブ。 2011年3月13日閲覧。
「Bourne Again Shell」は、Unix で一般的なシェルであったBourne Shellという名前をもじったものです。
- ^ Gattol, Markus (2011年3月13日)、Bourne-again Shell、2011年3月9日時点のオリジナルよりアーカイブ、 2011年3月13日閲覧。
この名前は、1978年頃にStephen Bourneによって書かれ、バージョン7 Unixとともに配布された初期の重要なUnixシェルであるBourneシェル(sh)の名前と、「生まれ変わる」という概念を組み合わせたものです。
- ^ Torvalds, Linus Benedict (1991 年 8 月). 「comp.os.minix」 . 2009 年9 月 6 日閲覧。
現在、bash(1.08) と gcc(1.40) を移植しており、問題なく動作しているようです。
- ^ 「Bash FAQ、バージョン 4.14」。2018年9月1日時点のオリジナルよりアーカイブ。2016年4月9日閲覧。
- ^ abcdefghi IBM、Linux シェル
- ^ ab ルイ・プザン『マルチシア人』『貝殻の起源』
- ^ NIST、ASCII 出版物、PDF c1977
- ^ “新しいGNUパッケージのインストール”. 2020年10月3日時点のオリジナルよりアーカイブ。2020年9月4日閲覧。
- ^ abc POSIX の影響
- ^ Usenix ';login:' 2007 年 2 月
- ^ Brian Fox (1996年8月29日)、shell.c、Free Software Foundation、2018年9月28日時点のオリジナルよりアーカイブ、2010年11月1日閲覧、
生年月日: 1988年1月10日(日)。初版著者: Brian Fox
- ^ リチャード・ストールマン(2010 年 10 月 3 日)。「GNU プロジェクトについて」。フリーソフトウェア財団。2011 年 4 月 24 日のオリジナルからアーカイブ。2011年3 月 21 日閲覧。
フリーソフトウェア財団の従業員は、数多くの GNU ソフトウェア パッケージを作成し、保守してきました。特に注目すべき 2 つは、C ライブラリとシェルです。... GNU プロジェクトは単なるツールや開発環境ではないため、私たちはこれらのプログラムの開発に資金を提供しました。私たちの目標は完全なオペレーティング システムであり、これらのプログラムはその目標に必要でした。
- ^ stallman.org POSIX
- ^ ab POSIX 背景情報
- ^ マチェック、アッシュバリアント
- ^ len (g...@prep.ai.mit.edu) (1993 年 4 月 20 日)。 「1993 年 1 月の GNU の会報」。ニュースグループ: gnu.announce.使用ネット: gnusenet930421bulletin@prep.ai.mit.edu。 2021年3月2日のオリジナルからアーカイブ。2010 年10 月 28 日に取得。
- ^ Ramey, Chet (1994 年 8 月 1 日). 「Bash - the GNU shell (Reflections and Lessons Learned)」. Linux Journal . 2008 年 12 月 5 日時点のオリジナルよりアーカイブ。2008年11 月 13 日閲覧。
- ^ Chet Ramey (2010年10月31日)、Dates in your Computerworld interview、2012年7月20日時点のオリジナルよりアーカイブ、2010年10月31日閲覧
- ^ Hamilton, Naomi (2008年3月30日). 「プログラミング言語のAZ: BASH/Bourne-Again Shell」. Computerworld . 2016年11月8日時点のオリジナルよりアーカイブ。 2022年3月1日閲覧。
- ^ Ramey, Chet (2021年4月20日). 「GNU Bourne-Again Shell」.テクノロジー・インフラストラクチャ・サービス.ケース・ウェスタン・リザーブ大学. 2022年3月1日閲覧。
- ^ Chet Ramey (1989 年 6 月 12 日). 「Bash 0.99 の修正と改善」.ニュースグループ: gnu.bash.bug. 2012 年 11 月 10 日時点のオリジナルよりアーカイブ。2010 年11 月 1 日閲覧。
- ^ Chet Ramey (1989 年 7 月 24 日). 「Some bash-1.02 fixes」.ニュースグループ: gnu.bash.bug. 2012 年 11 月 10 日時点のオリジナルよりアーカイブ。2010 年10 月 30 日閲覧。
- ^ Brian Fox (1990 年 3 月 2 日). 「bash 1.05 の可用性」.ニュースグループ: gnu.bash.bug. 2012 年 11 月 10 日時点のオリジナルよりアーカイブ。2010年10 月 30 日閲覧。
- ^ Bresnahan, Christine; Blum, Richard (2015 年 4 月)。CompTIA Linux+ Powered by Linux Professional Institute 学習ガイド: 試験 LX0-103 および試験 LX0-104 (第 3 版)。John Wiley & Sons, Inc. p. 5。ISBN
978-1-119-02122-3. 2021年3月2日時点のオリジナルよりアーカイブ。2016年6月6日閲覧。
Linuxでは、最も人気のあるシェルであるため、ほとんどのユーザーはbashを実行します。
- ^ Danesh, Arman; Jang, Michael (2006 年 2 月)。Mastering Linux。John Wiley & Sons, Inc. p. 363。ISBN
978-0-7821-5277-7. 2021年3月2日時点のオリジナルよりアーカイブ。 2016年6月6日閲覧。
Bourne Again Shell (bash) は、Linux ディストリビューションでインストールされる最も一般的なシェルです。
- ^ ab ポータブル文字セット
- ^ abc Debian、シェル
- ^ ab 「デスクトップの代替品」。Forbes。
- ^ 「付録 A: BeOS コマンドラインシェルの使用」. testou.free.fr .
- ^ ab 単一 UNIX 仕様 v 3 - 概要
- ^ 「ターミナル」。
- ^ Essential Mac OS S Panther Server Adminstration、189 ページ
- ^ abc POSIX FAQ v 1.18
- ^ POSIX-2004
- ^ POSIX-2013
- ^ POSIX-2016
- ^ 「ソースコードが見つかりません - GPL 準拠ですか? · Issue #107 · Microsoft/WSL」。GitHub。2019年 9 月 24 日時点のオリジナルよりアーカイブ。2016年7 月 8 日閲覧。
- ^ 「GNU Bash」。Softpedia。SoftNews。2010年1月23日。2017年10月21日時点のオリジナルよりアーカイブ。2016年4月9日閲覧。
- ^ “互換性サブシステム”. 2020年9月23日時点のオリジナルよりアーカイブ。2020年9月4日閲覧。
- ^ POSIX-2018
- ^ ab scriptingosx.com、Zsh への移行
- ^ フォスター・ジョンソン、エリック、ウェルチ、ジョン・C、アンダーソン、ミカ(2005年4月)。シェルスクリプト入門。ジョン・ワイリー・アンド・サンズ社、6ページ。ISBN
978-0-7645-9791-6. 2021年3月2日時点のオリジナルよりアーカイブ。2016年6月6日閲覧。
Bashは圧倒的に最も人気のあるシェルであり、LinuxおよびMac OSXシステムのデフォルトシェルを形成しています。
- ^ “Mac のデフォルトシェルとして zsh を使用する - Apple サポート”. 2019 年 12 月 2 日時点のオリジナルよりアーカイブ。2019 年7 月 1 日閲覧。
- ^ ab Warren, Tom (2019年6月4日). 「Apple、macOS Catalinaのデフォルトシェルとしてbashをzshに置き換え」The Verge。 2019年6月10日時点のオリジナルよりアーカイブ。 2019年6月13日閲覧。
- ^ [1]
- ^ 「コマンド実行環境 (Bash リファレンスマニュアル)」。www.gnu.org。
- ^ 「Brace Expansion (Bash Reference Manual)」。www.gnu.org。2018年3月15日時点のオリジナルよりアーカイブ。 2024年1月10日閲覧。
- ^ {{ cite web bash.html#Programmable-Completion | title = Bash リファレンスマニュアル | url = https://www.gnu.org/software/bash/manual/ }} | website = www.gnu.org
- ^ 「Bash スクリプトのデバッグ」。tldp.org。2018年11 月 4 日時点のオリジナルよりアーカイブ。2018 年11 月 20 日閲覧。
- ^ 「Set 組み込み関数 (Bash リファレンスマニュアル)」www.gnu.org 。2024年1 月 10 日閲覧。
- ^ “Bash の変更 [Bash Hackers Wiki (DEV 20200708T2203)]”. wiki-dev.bash-hackers.org . 2019年9月23日時点のオリジナルよりアーカイブ。 2019年9月23日閲覧。
- ^ 「Bourne Shell Builtins (Bash Reference Manual)」。www.gnu.org 。 2024年1月10日閲覧。
- ^ 「Bash リファレンスマニュアル」www.gnu.org。2019年9月15日時点のオリジナルよりアーカイブ。2019年9月15日閲覧。
- ^ 「bash 2.x/3.x でより生産的に作業する」www.caliban.org。2018 年 6 月 29 日時点のオリジナルよりアーカイブ。2018 年6 月 21 日閲覧。
- ^ 「6.11 Bash POSIX モード」、GNU Bash リファレンス マニュアル、Bash バージョン 4.1、2009 年 12 月 23 日、2010 年 12 月 3 日時点のオリジナルからアーカイブ、 2010 年10 月 26 日取得
- ^ 「Advanced Bash-Scripting Guide」www.tldp.org . セクション 37.2 (Bash、バージョン 3)。2017 年 5 月 5 日時点のオリジナルよりアーカイブ。2017年3 月 5 日閲覧。
- ^ “Bash, version 4”. tldp.org . 2018年7月1日時点のオリジナルよりアーカイブ。2018年6月25日閲覧。
- ^ abc “BashFAQ/061 - Greg's Wiki”. mywiki.wooledge.org . 2021年3月2日時点のオリジナルよりアーカイブ。2021年3月1日閲覧。
- ^ 「配列 (Bash リファレンスマニュアル)」。www.gnu.org。2018年 7 月 11 日時点のオリジナルよりアーカイブ。2018 年7 月 4 日閲覧。
- ^ “macos - OSXでbashをバージョン4.0にアップデートする”。Ask Different。2018年6月25日時点のオリジナルよりアーカイブ。2018年6月25日閲覧。
- ^ ab Hughes, Matthew (2019年6月4日). 「なぜmacOS CatalinaはBashではなくZshを使用するのか? ライセンス」The Next Web . 2020年12月31日時点のオリジナルよりアーカイブ。 2021年1月12日閲覧。
- ^ ab Mendel Cooper. 「移植性の問題」。Linux ドキュメンテーション プロジェクト。ibiblio.org。2012 年 1 月 27 日時点のオリジナルよりアーカイブ。2012 年1 月 26 日閲覧。
- ^ ab “10. ファイル”. Debian ポリシーマニュアル v4.5.0.2 . 2020年5月12日時点のオリジナルよりアーカイブ。2020年5月11日閲覧。
- ^ 「Linux、MacOS、Bashで日付と時刻をフォーマットする方法」。Shell Tips!。2020年6月3日時点のオリジナルよりアーカイブ。2020年6月3日閲覧。
- ^ ab – Linux一般コマンドマニュアル
- ^ ab – Linux一般コマンドマニュアル
- ^ “Portable Shell”. Autoconf . 2021年3月2日時点のオリジナルよりアーカイブ。 2020年1月20日閲覧。
- ^ 「BASH ヘルプ - Bash チュートリアル」。Hypexr.org。2012 年 10 月 5 日。2021 年 3 月 2 日時点のオリジナルよりアーカイブ。2013年7 月 21 日閲覧。
- ^ 「Bash リファレンスマニュアル」www.gnu.org。2018年3月15日時点のオリジナルよりアーカイブ。 2018年3月27日閲覧。
- ^ 「Bashリファレンスマニュアル」tiswww.case.edu。
- ^ 「bash 2.x/3.x でより生産的に作業する」www.caliban.org。2018 年 6 月 29 日時点のオリジナルよりアーカイブ。2018 年6 月 21 日閲覧。
- ^ “Index of /gnu/bash”. ftp.swin.edu.au . 2020年3月8日時点のオリジナルよりアーカイブ。 2019年9月15日閲覧。
- ^ ab 「プログラマブル補完入門」. tldp.org . 2022年1月21日閲覧。
- ^ 「The Open Group Base Specifications Issue 7、2018年版」。pubs.opengroup.org。
- ^ 「BASH(1)マニュアルページ」tiswww.case.edu。
- ^ "bash.0\doc - bash.git - bash". git.savannah.gnu.org .
- ^ abc 「Bash - GNUプロジェクト - フリーソフトウェア財団」。www.gnu.org 。 2024年1月10日閲覧。
- ^ 「GNU Bourne-Again Shell」. tiswww.case.edu .
- ^ 「よくある質問」.
- ^ GNU Bash マニュアル、3.5.3 シェルパラメータ展開
- ^ bash(1), パラメータ展開
- ^ POSIX 2024、2.6.2 パラメータ拡張
- ^ GNU Bash マニュアル、3.4.2 特殊パラメータ
- ^ POSIX 2024、2.5.2 特殊パラメータ
- ^ ab GNU Bash マニュアル、4.3.1 Set 組み込み関数
- ^ abcde bash(1), シェル組み込みコマンド
- ^ ab POSIX 2024、設定
- ^ ab GNU Bash マニュアル、4.1 Bourne Shell 組み込み関数: trap
- ^ GNU Bash マニュアル、5.2 Bash 変数
- ^ bash(1): シェル変数
- ^ GNU Bash マニュアル、5.2 Bash 変数: BASHPID
- ^ GNU Bash マニュアル、5.2 Bash 変数: BASH_ARGC
- ^ GNU Bash マニュアル、5.2 Bash 変数: BASH_ARGV
- ^ GNU Bash マニュアル、5.2 Bash 変数: BASH_LINENO
- ^ GNU Bash マニュアル、5.2 Bash 変数: BASH_REMATCH
- ^ GNU Bash マニュアル、5.2 Bash 変数: BASH_SOURCE
- ^ GNU Bash マニュアル、5.2 Bash 変数: BASH_XTRACEFD
- ^ GNU Bash マニュアル、5.2 Bash 変数: EPOCHREALTIME
- ^ GNU Bash マニュアル、5.2 Bash 変数: FUNCNAME
- ^ GNU Bash マニュアル、5.2 Bash 変数: LINENO
- ^ GNU Bash マニュアル、5.2 Bash 変数: PIPESTATUS
- ^ GNU Bash マニュアル、5.2 Bash 変数: PPID
- ^ GNU Bash マニュアル、5.2 Bash 変数: PS4
- ^ GNU Bash マニュアル、4.3.2 Shopt 組み込み
- ^ ShellCheck: シェルスクリプト解析ツール
- ^ Github: シェルチェック
- ^ パッケージ: devscripts: Debian パッケージのメンテナーの作業を楽にするスクリプト
- ^ Kcov - コードカバレッジ
- ^ BASHデバッガーによるデバッグ
- ^ プロジェクトのホームページのドキュメント: 「[Bashdb-devel Re: [PATCH] bashdb スクリプトの tmp ディレクトリの処理を修正」]
- ^ Juliana, Cino (2017年6月10日). 「Linux bash 終了ステータスと bash で終了ステータスを設定する方法 - Techolac」。2019年6月21日時点のオリジナルよりアーカイブ。 2019年6月21日閲覧。
- ^ Leyden, John (2014 年 9 月 24 日). 「Patch Bash NOW: 'Shell Shock' バグが OS X と Linux システムを徹底的に攻撃」The Register。2014 年 10 月 16 日時点のオリジナルよりアーカイブ。2014 年9 月 25 日閲覧。
- ^ Perlroth, Nicole (2014年9月25日). 「セキュリティ専門家、Bashの「Shellshock」ソフトウェアバグが重大になると予想」ニューヨークタイムズ。2019年4月5日時点のオリジナルよりアーカイブ。 2014年9月25日閲覧。
- ^ Seltzer, Larry (2014年9月29日). 「Shellshock により Heartbleed は重要でなくなる」ZDNet . 2016年5月14日時点のオリジナルよりアーカイブ。
- ^ Huzaifa Sidhpurwala (2014 年 9 月 24 日). 「Bash の特別に細工された環境変数コード インジェクション攻撃」. Red Hat . 2014 年 9 月 25 日時点のオリジナルよりアーカイブ。2014年9 月 25 日閲覧。
- ^ Chazelas, Stephane (2014 年 10 月 4 日). 「oss-sec メーリング リスト アーカイブ」. Seclists.org . 2014 年 10 月 6 日時点のオリジナルよりアーカイブ。2014年10 月 4 日閲覧。
- ^ bashbug(1) 2018年10月2日アーカイブ、Wayback Machine、die.net
- ^ 「Linux / Unix コマンド: bashbug」2014 年 10 月 6 日アーカイブ、Wayback Machine、apple.com
- ^ 「Windows 10 に Bash シェル コマンドライン ツールをインストールする方法」。2016 年 9 月 28 日。2016 年 11 月 20 日時点のオリジナルよりアーカイブ。2016年11 月 20 日閲覧。
- ^ Hoffman, Chris (2021年7月30日). 「Windows 11にWindows Subsystem for Linuxをインストールする方法」. How-To Geek . 2022年10月12日閲覧。
- ^ 「ユーザー環境機能の変更」。Oracle。2018年6月12日時点のオリジナルよりアーカイブ。2018年6月8日閲覧。
- ^ “github version history NEWS v5.0”. GitHub . 2022年5月4日時点のオリジナルよりアーカイブ。2021年3月1日閲覧。
- ^ “Bash の変更点 [Bash Hackers Wiki]”. 2020年3月18日時点のオリジナルよりアーカイブ。 2019年11月25日閲覧。
- ^ “Bash-5.0 release available”. lists.gnu.org . 2020年11月8日時点のオリジナルよりアーカイブ。 2021年3月1日閲覧。
- ^ GNU プロジェクト。「README ファイル」。2019 年 4 月 26 日時点のオリジナルよりアーカイブ。2014年4 月 16 日閲覧。Bash
はフリーソフトウェアであり、フリーソフトウェア財団が発行した [GNU] 一般公衆利用許諾書バージョン 3 (またはそれ以降のバージョン) の条項に基づいて配布されています。
- ^ "bash-1.11". oldlinux.org . 2021年10月15日時点のオリジナルよりアーカイブ。2021年6月9日閲覧。GPL
-2.0以降についてはtest.cを参照。
- ^ "bash-1.05.tar"。oldlinux.org。
- ^ 「おそらく最初の bash ソースである bash-0.99 をダウンロードする方法はありますか?」unix.stackexchange.com。
- ^ 「BORN-AGAINの定義」www.merriam-webster.com 。 2024年1月9日閲覧。
- ^ 「Bash とは? (Bash リファレンスマニュアル)」www.gnu.org 。2024年1 月 9 日閲覧。
- ^ 「BASHの定義」www.merriam-webster.com 2024年1月5日2024年1月9日閲覧。
- ^ 「アイロニーの定義、一般的な例、文学における意義」。2020年8月31日。
- ^ 「ほのめかし - ほのめかしの例と定義」 2014年1月2日。
- ^ 「BashGuide/Arrays - Greg's Wiki」。mywiki.wooledge.org 。 2024年1月10日閲覧。
- ^ “CommandSubstitution - Greg's Wiki”. mywiki.wooledge.org . 2024年1月10日閲覧。
- ^ 「BashGuide/TestsAndConditionals - Greg's Wiki」。mywiki.wooledge.org 。 2024年1月10日閲覧。
- ^ 「CHANGES - bash.git - bash」. git.savannah.gnu.org . 2024年1月10日閲覧。
- ^ “Bash の変更点 [Bash Hackers Wiki]”. 2021年2月14日. 2021年2月14日時点のオリジナルよりアーカイブ。 2024年1月10日閲覧。
- ^ “廃止および非推奨の構文 [Bash Hackers Wiki]”. 2021年2月11日. 2021年2月11日時点のオリジナルよりアーカイブ。2024年1月10日閲覧。
- ^ Arch Linux、コマンドラインシェル
さらに読む
- スティーブンソン、ニール (2003)。『初めに…コマンドラインがあった』。ハーパーコリンズ。ISBN 978-0380815937。
- 「Linux におけるシェルの進化」。ibm.com。2024年5 月 19 日閲覧。
- 「スクリプトリファレンス:: Bourne-Again Shell (Bash) を使用したスクリプト」。berkeley.edu。2024年5月 19 日閲覧。
- 「IRIS :: 教育および研究情報システム :: FAQ: Unix :: UNIX シェルについて」. berkeley.edu . 2024 年5 月 19 日閲覧。
