生成ファイル名の加工
何らかのファイル名のパターン指定が展開され,
これにはヒストリ展開のときと同じように,
:h
(head)- 各ファイル名のディレクトリ名部分のみ取り出す。
:t
(tail)- 各ファイル名のファイル名部分
(最後のスラッシュ以降) のみ取り出す。 :e
(extension)- 各ファイル名の拡張子部分
(最後のピリオドより後ろ) のみ取り出す。 :r
(root)- 各ファイル名の基幹部分
(最後のピリオドより前) のみ取り出す。 :s/OLD/NEW/
(substitute)- 各ファイル名の最初に現れる OLD を NEW に置換。
:gs/OLD/NEW/
(global s)- 各ファイル名のすべての OLD を NEW に置換。
:&
- 直前の置換を繰り返し適用
たとえば *.c(:r)
とすると,*.c
ファイルの拡張子部分を取り除いた名前が得られる。
また,index.
があるディレクトリのみを選び,
% tar zcf /tmp/backup.tar.gz **/index.html(:h)
コマンドのフルパス展開
登録されたコマンド検索パスにあるコマンド名の前に `=
'を付けると,
たとえば,ls
' によって実際に起動されるプログラムを調べ,/bin/
だとしたら"/bin/
に展開される。
=ls
また,
% ls -lF =command
プロセス置換
Unixコマンドは,
たとえば,
% nkf -e file1 > file1.euc % nkf -e file2 > file2.euc % diff -ua file[12].euc | less % rm file[12].euc
このような場合に,
% diff -ua =(nkf -e file1) =(nkf -e file2) | less
zshのプロセス置換には以下の記法がある。
<(CommandLine)
- CommandLine を非同期的に起動し,
その出力が得られるファイル名 ( /dev/
や名前つきパイプなど)fd に置換される。 >(CommandLine)
- CommandLine を非同期的に起動し,
それへの入力となるファイル名に置換される。 =(CommandLine)
- CommandLine からの出力を保存した一時ファイルの名前に置換される。
ブレース展開
ブレース{ }
)
% echo {sta,men,cap}tion
station mention caption
% cp sub/dir/ecto/ry/somefile{,.bak}
(cp sub/dir/ecto/ry/somefile sub/dir/ecto/ry/somefile.bak が実行される)
zshではこれに加え,
{m..n}
-
2つの自然数 m から n までをすべて列挙したもの。
例:
% echo {1..
20} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 % echo {01.. 20} 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 % echo {001.. 20} 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 % echo {12.. 3} 12 11 10 9 8 7 6 5 4 3 % echo -{12.. 3} -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 {c1-c2}
-
文字c1 から c2までのすべての文字。シェルオプション
brace_
が必要。ccl 例:
% setopt braceccl % echo {0-9A-Ma-z} 0 9 A B C D E F G H I J K L M a b c d e f
まとめ
zshが提供する様々な展開は,
次回は,