シェル拡張
シェルで作業している間、情報のセットまたは範囲が繰り返されることがよくあります。シェル拡張は、コンパクトな構文を使用して多数のシェル トークンを生成するのに役立ちます。コマンドがトークンに分割された後、展開はコマンド ラインで実行されます。利用可能な多くの展開のうち、パス名、ファイル名、ブレース展開については先に説明します。
パス名展開
パス名の展開により、ディレクトリ階層内の場所の変更が簡素化されます。パス名の展開には次が含まれます:
– チルダ (~) 現在のユーザーのホーム ディレクトリの絶対パス名を表す文字
– 指定したユーザーのホーム ディレクトリを表す、ユーザー名のチルダ (~) 文字
– ダッシュ ( -) 前の作業ディレクトリを表す文字
それぞれの拡張文字について、次の例を検討してください。
1.チルダ (~) 文字を使用してディレクトリを dir1 に変更します。
$ cd ~/dir1 $ pwd /home/user/dir1/
2. チルダ (~) 文字とそれに続くユーザー名を使用して、ディレクトリをユーザーのホーム ディレクトリに変更します。
$ cd ~user $ pwd /home/user
3. – 拡張文字を使用して、user ディレクトリと tmp ディレクトリを切り替えます。
$ cd $ pwd /home/user
$ cd /tmp $ pwd /tmp
$ cd - /export/home/user1 $ cd - /tmp
ファイル名の展開
ファイル名の展開は次のとおりです:
- アスタリスク (*) 文字
- 疑問符 (?) 文字
- 角かっこ ([]) 文字
1.アスタリスク (*) 文字
アスタリスク (*) 拡張文字は、ワイルドカード文字とも呼ばれ、隠しファイルの先頭のピリオド (.) を除いて、0 個以上の文字を表します。たとえば、文字 f で始まり、その後に 0 個以上の他の文字が続くすべてのファイルとディレクトリを一覧表示します。
$ ls f* file.1 file.2 file.3 file4
もう 1 つの例は、0 個以上の文字が前に付いた数字 3 で終わるすべてのファイルとディレクトリを一覧表示することです。
$ ls *3 file.3 file3
2.疑問符 (?) 文字
疑問符 (?) 文字はワイルドカード文字とも呼ばれ、隠しファイルの先頭のピリオド (.) を除く任意の 1 文字を表します。たとえば、文字列 dir で始まり、その後に別の 1 文字が続くすべてのファイルとディレクトリを一覧表示します。
$ ls dir? dir1: coffees fruit trees dir2: beans notes recipes
疑問符 (?) 文字を使用したエントリに一致するファイルがない場合、エラー メッセージが表示されます。
$ ls z? z?: No such file or directory
3.角かっこ ([]) 文字
角かっこ ([] ) 文字は、1 つの文字位置の文字のセットまたは範囲を表します。
– 文字のセットは、[acb] などの任意の数の特定の文字です。セット内の文字は、必ずしも任意の順序である必要はありません。たとえば、[abc] は [cab] と同じです。
– 文字の範囲は、順序付けられた一連の文字です。
- 範囲は、[a–z] または [0–9] のように、最初の文字に続いてハイフン (-) と最後の文字をリストします。
- 範囲を指定するときは、出力に表示する順序で文字を並べます。
- たとえば、[A–Z] または [a–z] を使用して、それぞれ大文字または小文字のアルファベット文字を検索します。
たとえば、a から f までの文字で始まるすべてのファイルとディレクトリを一覧表示します。
$ ls [a-f]* brands dante_1 file.1 file2 file4 celery feathers file1 file.3 fruit dante feathers_6 file.2 file3 fruit2
たとえば、文字 f または p で始まるすべてのファイルとディレクトリを一覧表示します。
$ ls [fp]* perm file.1 file.2 file.3 file4 fruit2 feathers_6 file1 file2 file3 fruit
ブレース拡張
ブレース {} 展開は、任意の文字列を生成できるメカニズムです。ブレース展開されるパターンは、オプションのプリアンブルの形式を取り、その後に一連のカンマ区切りの文字列または 1 組の中括弧の間のシーケンス式が続き、その後にオプションのポストスクリプトが続きます。プリアンブル「a」は、中括弧内に含まれる各文字列の前に付けられ、後置スクリプト「e」が結果の各文字列に追加され、左から右に展開されます。
$ echo a{d,c,b}e ade ace abe