Bash
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 よりも簡単にタイプできる。
ブレース展開はオルターネイションとも呼ばれ、C shellから取り入れた機能である。ブレース展開は取り得る組み合わせのセットを生成する。生成された結果はファイルとして存在する必要はない。展開された各文字列結果はソートされておらず、保存された順に左から右へと並んでいる:
Bourne shellではBashと同じ出力を返さないため、ユーザーは移植するためのシェルスクリプトでブレース展開を使うべきではない。
ブレース展開がワイルドカードと組み合わされた場合、最初に括弧が展開されてから通常通りワイルドカードが置換される。したがって、カレントディレクトリにある拡張子が .jpg または .jpeg または .png のファイル群を獲得するには以下のようにする:
ブレース展開は取り得る全ての組み合わせだけではなく、連続した範囲に対して適用することも可能である。範囲は2つの整数や文字の間を、2つのドットで区切って指定する。Bashの新しいバージョンでは、範囲の終点を指定する2つ目の整数の後にさらに2つのドットと3つ目の整数を指定することで、範囲の増分を指定することも可能である。
ブレース展開を変数展開と組み合わせると、ブレース展開が先に行われ変数展開がその後に行われてしまうため、場合によってはevalビルトインが必要になる可能性もある:
Bashは先行するコマンドにより設定された終了コードに応じてコマンドを実行する、「条件付き実行」コマンド区切り文字を提供する。以下にその例を示す:
./何かのコマンド は、cd コマンドが「成功」した(終了ステータスとして 0 を返した)場合のみ実行され、echo コマンドは cd か ./何かのコマンド コマンドのどちらかがエラーを返した(終了ステータスが 0 以外を返した)場合のみ実行される。
全てのコマンドに対して、終了ステータスは特殊な変数である $? に保存される。Bashは条件コマンド評価の形式として、if 条件 ; then 条件を満たす場合の処理 ; else 条件を満たさない場合の処理 ; fi や case $変数 in パターン1) 処理1 ;; パターン2) 処理2 ;; esac もサポートする。