GoGPT Best VPN GoSearch

OnWorksファビコン

zshexpn - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーター上の OnWorks 無料ホスティング プロバイダーで zshexpn を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド zshexpn です。

プログラム:

NAME


zshexpn - zsh の展開と置換

DESCRIPTION


次のタイプの展開は、示された順序で XNUMX つのステップで実行されます。

沿革 拡張
これは対話型シェルでのみ実行されます。

エイリアス 拡張
エイリアスは、説明したようにコマンド ラインが解析される直前に展開されます。
エイリアシングの下で ズシュミスクとします。

プロセス 置換
拡張
Command 置換
算術 拡張
ブレース 拡張
これら XNUMX つは、左から右の形式で XNUMX ​​つのステップで実行されます。 これらの後
展開、引用符で囲まれていない文字 ` のすべての出現\'、 `''と `"' それは
除去された。

ファイル名 拡張
Status SH_FILE_EXPANSION オプションが設定されている場合、展開順序は次のように変更されます。
との互換性 sh   kshの。 その場合 ファイル名 拡大 は発表された
直後 alias 拡大、前述の XNUMX つの拡張セットの前に
上記。

ファイル名 世代
この拡張は、一般に次のように呼ばれます。 グロビング、常に最後に行われます。

次のセクションでは、拡張の種類について詳しく説明します。

HISTORY 拡張


履歴を拡張すると、以前のコマンド ラインの単語をコマンド ラインで使用できるようになります。
あなたは入力しています。 これにより、スペルの修正や複雑な作業の繰り返しが簡素化されます。
コマンドまたは引数。

各コマンドは実行直前に履歴リストに保存されます。
によって制御されます 履歴サイズ パラメータ。 最新の XNUMX つのコマンドが常に保持されます
いかなる場合でも。 履歴リストに保存された各コマンドは履歴と呼ばれます。 イベント とです。
シェルの起動時に 1 から始まる番号が割り当てられます。 履歴番号
プロンプトに表示される可能性があります (「プロンプト シーケンスの拡張」を参照してください)。 ズシュミスク(1)) は、
に割り当てられる番号 次の

概要
履歴の展開は、の最初の文字から始まります。 ヒスチャー パラメータ、つまり
`!' デフォルトでは、コマンドラインのどこにでも出現する可能性があります。 履歴の拡張は行われません
ネスト。 `!' は ' でエスケープできます\' または一対の単一引用符で囲むこともできます
('') 特別な意味を抑制します。 二重引用符は、 このために働きます。 続く
この履歴文字はオプションのイベント指定子です (セクション「イベント」を参照)
指定子')、次にオプションの単語指定子 (セクション「単語指定子」)。 もし
これらの指定子がどちらも存在しない場合、履歴の展開は行われません。

履歴展開を含む入力行は、展開後、エコーされる前にエコーされます。
他の展開はコマンドが実行される前に行われます。 それがこの拡張された形です
これは、後で参照できるように履歴イベントとして記録されます。

デフォルトでは、イベント指定子のない履歴参照は、他の履歴参照と同じイベントを参照します。
そのコマンドラインでの前の履歴参照。 それが唯一の履歴参照である場合
コマンドの場合、前のコマンドを参照します。 ただし、オプションの場合は、 CSH_JUNKIE_HISTORY is
設定した後、イベント指定のないすべての履歴参照 常に を参照
前のコマンド。

たとえば、「!' は前のコマンドのイベント指定子であるため、 `!!:1' は常に参照します
前のコマンドの最初の単語に、および `!! $' は常に最後の単語を指します。
前のコマンド。 と CSH_JUNKIE_HISTORY 設定してから `!:1'と `!$' 同じ機能
`としてのやり方!!:1'と `!! $'、 それぞれ。 逆に、もし CSH_JUNKIE_HISTORY 設定されていません、
それから`!:1'と `!$' は、それぞれ同じイベントの最初と最後の単語を指します
現在のコマンドで先行する最も近い他の履歴参照によって参照されます。
行、または先行する参照がない場合は前のコマンドに移動します。

文字シーケンス `^foo^バー' (ここで '^' は実際には の XNUMX 番目の文字です。
ヒスチャー パラメータ)文字列を置き換えて最後のコマンドを繰り返します foo   バー。 もっと
正確には、シーケンス `^foo^バー^' は ' と同義です!!:s^foo^バー^'、したがって他の
修飾子 (セクション「修飾子」を参照) は最後の ` の後に続く場合があります。^'。 特に、
`^foo^バー^:G' はグローバル置換を実行します。

シェルが文字シーケンス ` に遭遇した場合!"' 入力にある場合、履歴メカニズムは次のとおりです。
現在のリストまで一時的に無効になります (「 ズシュミスク(1)) は完全に解析されます。 `!"」は
入力から削除され、その後の `!' 文字には特別な意味はありません。

利便性は劣りますが、よりわかりやすい形式のコマンド履歴サポートが提供されます。
  fc 内蔵。

イベント 指定子
イベント指定子は、履歴リスト内のコマンド ライン エントリへの参照です。 の中に
以下のリスト、最初の部分に注意してください。 「!」 各項目の は別のキャラクターに変更される場合があります
設定することにより ヒスチャー パラメータに一致する最初のデバイスのリモートコントロール URL を返します。

! 空白、改行、` が続く場合を除き、履歴展開を開始します。='または `('.
直後に単語指定子が続く場合 (「単語指定子」セクションを参照)、
これにより、イベント指定子のない履歴参照が形成されます (セクションを参照)
「概要」)。

!! 前のコマンドを参照してください。 この展開自体は、前の展開を繰り返します。


!n コマンドラインを参照 n.

!-n 現在のコマンドラインのマイナスを参照してください。 n.

!STR で始まる最新のコマンドを参照してください。 STR.

!?STR[?]
を含む最新のコマンドを参照してください。 STR。 末尾の `?' が必要な場合は
この参照の後には修飾語が続くか、修飾語以外のテキストが続きます。
~の一部とみなされます STR.

!# これまでに入力された現在のコマンド ラインを参照してください。 行は次のように扱われます。
` が付いた単語の前の単語まで完全でした!#' 参照。

!{...} 履歴参照を隣接する文字から分離します (必要な場合)。

Word 指定子
単語指定子は、特定のコマンド ラインのどの単語を含めるかを示します。
歴史上のリファレンスで。 ああ:' 通常、イベントの仕様と単語を区切ります。
指定者。 単語指定子が ` で始まる場合にのみ省略できます。^'、 `$'、 `*',
`-'または `%'。 単語指定子には次のものが含まれます。

0 最初の入力単語 (コマンド)。
n 当学校区の n番目の引数。
^ 最初の引数。 あれは、 1.
$ 最後の引数。
% (最新) に一致した単語 ?STR 検索。
x-y さまざまな単語。 x デフォルトは 0.
* すべての引数、または引数がない場合は null 値。
x* `を省略しますx-$'.
x- `のようにx*' ただし単語を省略します $.

` に注意してください。%' 単語指定子は、 ` のいずれかで使用された場合にのみ機能します。!%'、 `!:%'または `!?STR?:%',
の後に使用する場合のみ !? 展開 (以前のコマンドで行われた可能性があります)。 他に何か
最も明白なエラーではないかもしれませんが、エラーが発生します。

修飾子
オプションの単語指定子の後に、次の XNUMX つ以上のシーケンスを追加できます。
修飾子。それぞれの前に ` が付きます:'。 これらの修飾子は、次の結果にも作用します。 ファイル名
世代   パラメーター 拡大、特に断りのない限り。

a ファイル名を絶対パスに変換します。
必要であり、` の使用を解決します。..'と `.パスにある。 注意してください。
ファイルや間にあるディレクトリが変換されない場合でも、変換は行われます。
存在する。

A `としてa' ただし、可能な場合はシンボリック リンクの使用も解決します。 ご了承ください
`の解決..』が発生する シンボリックリンクの解決。 この電話は
に相当 a システムに リアルパス システムコール (最新のシステム
NS)。

c 次のように指定されたコマンド パスを検索して、コマンド名を絶対パスに解決します。
  パス 変数。 これは、ディレクトリ部分を含むコマンドには機能しません。
また、これは通常、
同じ名前が現在のディレクトリにあります。

e ` に続くファイル名拡張子の部分を除くすべてを削除します。.'; を見てください
の説明におけるファイル名拡張子の定義 r 以下の修飾子。
その定義によれば、文字列が終了すると結果は空になることに注意してください。
`で.'.

h 先頭を残して、末尾のパス名コンポーネントを削除します。 これは「」のように機能しますディレクトリ名'.

l 単語をすべて小文字に変換します。

p 新しいコマンドを出力しますが、実行はしません。 履歴の展開でのみ機能します。

q 置換された単語を引用符で囲み、それ以上の置換を回避します。 歴史のある作品
拡張とパラメータ拡張。ただし、パラメータの場合は、次の場合にのみ役立ちます。
結果のテキストは次のようにして再評価されます。 評価する.

Q 置換された単語から XNUMX レベルの引用符を削除します。

r ルート名を残してファイル名拡張子を削除します。 ファイル名のない文字列
拡張子は変更されません。 ファイル名の拡張子は `.' の後に任意の数の
` ではない文字 (ゼロを含む).'または `/」と続きます。
文字列の終わり。 たとえば、` の拡張子foo.orig.c' は '.c'、および
`dir.c/foo' には拡張子はありません。

s/l/r[/]
代替 rl 以下に説明するとおりです。 置換は最初のものに対してのみ行われます
一致する文字列 l。 配列とファイル名の生成の場合、これは以下に適用されます。
展開されたテキストの各単語。 置換に関する詳細については、以下を参照してください。

フォーム `gs/l/r'と `s/l/r/:G' グローバル置換を実行します。つまり、
あらゆる出来事が起こる rl。 なお、 g or :G 正確に現れる必要があります
位置が示されています。

この形式の置換に関する詳細については、以下の注意事項を参照してください。

& 前を繰り返します s 置換。 のように sの直前に g.
パラメータ展開では、 & 中括弧内およびファイル名の生成時に指定する必要があります
バックスラッシュで囲む必要があります。

t 末尾を残して、先頭のパス名のコンポーネントをすべて削除します。 これは次のように機能します
`ベース名'.

u 単語をすべて大文字に変換します。

x いいね q、ただし空白で単語を区切ります。 パラメータでは機能しません
拡張。

当学校区の s/l/r/ 置換は次のように機能します。 デフォルトでは、置換の左側
パターンではなく文字列です。 区切り文字として任意の文字を使用できます。
`の場所/'。 バックスラッシュは区切り文字を引用します。 文字「」&'、 の中に
右側 r、左側のテキストに置き換えられます。 l。 `&'することができます
バックスラッシュで引用します。 ヌル l 前の文字列を使用します。 l or
コンテキストスキャン文字列から s `から!?s'。 次の場合は、右端の区切り文字を省略できます。
改行がすぐに続く r; 一番右の`?' コンテキスト スキャンでも同様に、
省略。 前回の同じ記録に注目してください l   r あらゆる形式にわたって維持されます
拡張。

` の場合は注意してください。&' は glob 修飾子内で使用されます。追加のバックスラッシュが必要です。 &  
この場合は特殊文字です。

また、展開の順序が解釈に影響することにも注意してください。 l   r。 使用時
他の拡張の前に発生する履歴拡張では、 l   r として扱われます
リテラル文字列 (説明したものを除く) HIST_SUBST_PATTERN 下に)。 で使用する場合
パラメータの拡張、置き換え r パラメータの値への変換が最初に行われ、
その後、追加のプロセス、パラメータ、コマンド、算術、または中括弧の参照が追加されます。
適用されると、それらの置換と拡張が複数回評価される可能性があります。 l 登場する
開始値に複数回含まれています。 glob 修飾子で使用される場合、置換または
展開は、` の前であっても、修飾子が解析されるときに XNUMX 回実行されます。:s'
表現自体は次のように分かれます。 l   r 側面。

オプションの場合 HIST_SUBST_PATTERN 設定され、 l 通常の形式のパターンとして扱われます
これについては、以下の「ファイル名の生成」セクションで説明します。 これはあらゆる場所で使えます
修飾子が利用可能な場合。 ただし、グロビング修飾子のパラメータにあることに注意してください。
置換はすでに行われているため、置換文字列のパラメータは次のようになります。
正しい時期に交換されることを保証するために引用されています。 複雑なことにも注意してください
グロビング修飾子で使用されるパターンには、拡張されたグロブ修飾子の表記が必要になる場合があります
(#q:s/.../.../) シェルが式をグロブ修飾子として認識できるようにするためです。
さらに、置換における不正なパターンは、 NO_BAD_PATTERN
オプションを指定するとエラーが発生します。

日時 HIST_SUBST_PATTERN 設定され、 l で始まる場合があります # パターンが次のことを行う必要があることを示します
置換される文字列の先頭に一致し、 % 最初に表示される場合もあれば、
# パターンが文字列の末尾で一致する必要があることを示します。
置き換えられました。 の % or # XNUMX つのバックスラッシュで引用符で囲むこともできます。

たとえば、次のファイル名生成コードは、 EXTENDED_GLOB
オプション:

印刷 *.c(#q:s/#%(#b)s(*).c/'S${match[1]}.C'/)

の拡張が必要です *。NS そして、glob修飾子を適用します。 (#q...) 表現
これは、各単語の先頭と末尾に固定された置換修飾子で構成されます (#%).
これにより、後方参照が有効になります ((#b))、括弧で囲まれた部分式が使用できるようになります。
置換文字列では次のようになります ${一致[1]}。 置換文字列は引用符で囲まれます。
パラメータは、ファイル名の生成が開始される前に置換されません。

以下 f, F, w   W 修飾子はパラメータ展開とファイル名でのみ機能します
世代。 それらはすべてのユーザーにとって単一の参照点を提供するためにここにリストされています。
修飾子。

f 結果が得られるまで、直後に (コロンなしで) 続く修飾子を繰り返します。
もう言葉は変わりません。

F::
いいね f、ただし繰り返しのみ n 式が 評価する n。 どれか
` の代わりに文字を使用できます:'; もし`('、 `['、または `{' として使用されます。
開始区切り文字、終了区切り文字は ' である必要があります。)'、 `]'、または `}'、 それぞれ。

w 直後の修飾子が文字列内の各単語に対して機能するようにします。

W:9月: いいね w ただし、単語は次の文字列で区切られた文字列の一部とみなされます。
9月。 ` の代わりに任意の文字を使用できます。:'; 開き括弧が処理されます
特に、上記を参照してください。

プロセス 代替


` の形式をとるコマンド引数の各部分<(リスト)'、 `>(リスト)'または `=(リスト)」は
プロセス置換の対象となります。 式の前後に他の文字が続く場合があります。
ただし、一般的に発生する文字列やパターンとの衝突を防ぐために、
最後の形式はコマンド引数の先頭に指定する必要があり、形式は展開されるだけです
コマンドまたは代入引数を最初に解析するとき。 プロセスの代替が使用される可能性がある
次のリダイレクト演算子。 この場合、置換は何も指定せずに指定する必要があります。
末尾の文字列。

の場合 < or > フォームでは、シェルはコマンドを実行します。 リスト のサブプロセスとして
シェルコマンドラインを実行するジョブ。 システムがサポートしている場合は、 / dev / fd 機構、
コマンド引数は、ファイル記述子に対応するデバイスファイルの名前です。
それ以外の場合、システムが名前付きパイプ (FIFO) をサポートしている場合、コマンド引数は
名前付きパイプ。 が付いているフォームの場合、 > が選択されている場合、この特別なファイルに書き込むと、
の入力 リスト。 場合 < を使用すると、引数として渡されたファイルが接続されます。
の出力 リスト 処理する。 例えば、

paste <(カット -f1 file1) <(カット -f3 file2) |
tee >(プロセス1) >(プロセス2) > / dev / null

ファイルからフィールド 1 と 3 を切り取ります file1   file2 それぞれ結果を貼り付けます
一緒にプロセスに送信します プロセス1   プロセス2.

If =(...) 代わりにが使用されます <(...)の場合、引数として渡されたファイルは次の名前になります。
の出力を含む一時ファイルの リスト プロセス。 これは代わりに使用できます
< lseek を期待するプログラムのフォーム (「 シーク(2)) 入力ファイルに。

フォームの置換の最適化があります。 =(<<argは)ここで、 argは  
here-string リダイレクトへの単一単語の引数 <<。 このフォームはファイル名を生成します
の値を含む argは 置換が実行された後。 これは扱われます
完全に現在のシェル内にあります。 これは事実上、特殊な形式の逆です。
$(argは) 治療するもの argは をファイル名として使用し、ファイルの内容に置き換えます。

当学校区の = フォームは、 / dev / fd そして名前付きパイプの実装 <(...) 持ってる
欠点。 前者の場合、一部のプログラムはファイルを自動的に閉じる可能性があります。
特にこの場合、コマンドラインでファイルを調べる前に、問題の記述子を確認してください。
プログラムが setuid を実行しているときなど、セキュリティ上の理由から必要です。 の中に
XNUMX 番目のケースでは、プログラムが実際にファイルを開かない場合、サブシェルはファイルをオープンしようとします。
パイプからの読み取りまたはパイプへの書き込みは (一般的な実装では、異なる動作になります)
システムは動作が異なる場合があります) は永久にブロックされるため、明示的に強制終了する必要があります。 で
どちらの場合も、シェルは実際にはパイプを使用して情報を提供するため、プログラムは
求めることを期待しているもの(を参照) シーク(2)) のファイルは機能しません。

また、前の例はよりコンパクトかつ効率的に記述できることにも注意してください。
(ただし、 マルチオス オプションが設定されています):

paste <(カット -f1 file1) <(カット -f3 file2) \
> >(プロセス1) > >(プロセス2)

シェルは、FIFO の代わりにパイプを使用して、後者の XNUMX つのプロセス置換を実装します。
上の例。

さらに問題があります >(プロセス); これを外部に取り付けた場合
コマンドを実行すると、親シェルは待機しません。 プロセス 終了するため、即時
次のコマンドは、結果が完全であることに依存できません。 問題と解決策は、
セクションで説明したのと同じ マルチオス in ズシュミスク(1)。 したがって、簡易バージョンでは
上記の例の場合:

paste <(カット -f1 file1) <(カット -f3 file2) > >(プロセス)

(いいえ、 マルチオス が関与しています)、 プロセス 限り非同期で実行されます。
親シェルが関係します。 回避策は次のとおりです。

{ paste <(カット -f1 file1) <(カット -f3 file2) } > >(プロセス)

ここでの追加のプロセスは、親シェルから生成され、プロセスを待機します。
完了。

一時ファイルを必要とする置換を伴うジョブでは常に別の問題が発生します。
` の場合を含め、シェルによって拒否されます。&!'または `&|' が末尾に表示されます
置換を含むコマンド。 その場合、一時ファイルはクリーンアップされません
シェルにはジョブの記憶がなくなったためです。 回避策は、サブシェルを使用することです。
例、

(mycmd =(私の出力)) &!

フォークされたサブシェルはコマンドが完了するのを待ってから一時ファイルを削除するためです。

プロセスの置換を適切な期間持続させるための一般的な回避策
次に、それをパラメータとして匿名シェル関数 (シェルコードの一部) に渡します。
これは関数スコープですぐに実行されます)。 たとえば、このコードは次のようになります。

() {
印刷 File $ 1:
cat $1
} =(印刷 この be   詩)

次のようなものが出力されます

File /tmp/zsh6nU0kS:
この be  

プロセス置換によって作成された一時ファイルは、関数が終了すると削除されます。
終了します。

パラメータ 拡張


文字「」$' はパラメータ拡張を導入するために使用されます。 見る zshparam(1)
配列、連想配列、添字表記などのパラメータの説明
個々の配列要素にアクセスします。

特に、引用符で囲まれていないパラメータの単語は自動的に分割されないことに注意してください。
オプションを除く空白文字 SH_WORD_SPLIT 設定されています。 以下のこのオプションの参照を参照してください
詳細については。 これは他のシェルとの重要な違いです。

以下で説明するパターンを必要とする拡張では、パターンの形式は次のとおりです。
ファイル名の生成に使用されるものと同じです。 「ファイル名の生成」セクションを参照してください。 注記
これらのパターンは、置換の置換テキストとともに、それ自体であることを示します。
パラメータ拡張、コマンド置換、および算術拡張の対象となります。 で
次の操作に加えて、セクションで説明されているコロン修飾子も使用できます。
「履歴拡張」セクションの「修飾子」を適用できます。たとえば、次のようになります。
${i:s/foo/bar/} パラメータの展開時に文字列置換を実行します $i.

${}
パラメータの値 (存在する場合) が置き換えられます。 中括弧は必須です
展開の後に文字、数字、またはアンダースコアが続く場合は、
~の一部として解釈される 。 さらに、より複雑な形式の
通常、置換には中括弧が存在する必要があります。 例外、のみ適用される
オプションの場合 KSH_ARRAYS 設定されていません。単一の添字またはコロン修飾子です。
名前または任意の文字 ` の後に表示されます。^'、 `='、 `~'、 `#'または `+'
名前の前に表示されます。これらはすべて、中括弧の有無にかかわらず機能します。

If は配列パラメータであり、 KSH_ARRAYS オプションが設定されていない場合、値は
の各要素の は、単語ごとに XNUMX つの要素で置き換えられます。 それ以外の場合は、
展開結果は XNUMX つの単語のみになります。 と KSH_ARRAYS、これはの最初の要素です
配列。 次の場合を除き、結果に対してフィールド分割は行われません。 SH_WORD_SPLIT オプション
が設定されています。 フラグも参照してください =   s:string:.

${+}
If 設定されたパラメータの名前です `1' が置換され、それ以外の場合は `0」は
代用。

${-単語}
${:-単語}
If が設定されているか、XNUMX 番目の形式で null でない場合は、その値を代入します。
それ以外の場合は代替 単語。 第二形態では 省略することもできますが、その場合は
単語 常に置換されます。

${+単語}
${:+単語}
If が設定されているか、XNUMX 番目の形式で null でない場合は、 単語; さもないと
何も代用しません。

${=単語}
${:=単語}
${:: =単語}
最初の形式では、 が設定されていない場合は、次のように設定します 単語; XNUMX 番目の形式の場合、
未設定または null の場合は、次のように設定します。 単語; そして第三の形式では、無条件に
セッションに 〜へ 単語。 すべての形式で、パラメータの値が置き換えられます。

${?単語}
${:?単語}
最初の形式では、 が設定されている場合、または XNUMX 番目の形式の場合 両方が設定されており、
null でない場合は、その値を代入します。 それ以外の場合は、印刷します 単語 そしてシェルから抜けます。
対話型シェルは代わりにプロンプ​​トに戻ります。 もし 単語 が省略された場合、
標準メッセージが出力されます。

変数をテストして代替変数を置き換える上記の式のいずれか 単語,
標準のシェル引用符を使用できることに注意してください。 単語 選択的に上書きする値
によって行われる分割 SH_WORD_SPLIT オプションと = フラグはありますが、
s:string: フラグ。

次の式の場合、 が配列であり、置換が引用符で囲まれていない、または
`の場合(@)' フラグまたは [@] 構文が使用され、照合と置換が実行されます。
各配列要素を個別に。

${#パターン}
${##パターン}
Status パターン の値の先頭と一致します を代入してください。
の値 一致した部分が削除されます。 それ以外の場合は、単に
の値 。 最初の形式では、最小の一致パターンが優先されます。 で
XNUMX 番目の形式では、最大の一致パターンが優先されます。

${%パターン}
${%%パターン}
Status パターン の値の末尾と一致します の値を代入します。
一致した部分が削除されます。 それ以外の場合は、単に次の値を代入します
。 最初の形式では、最小の一致パターンが優先されます。 XNUMX番目に
形式では、最大の一致パターンが優先されます。

${:#パターン}
Status パターン の値と一致します 、空の文字列を置き換えます。
それ以外の場合は、単に次の値を代入します 。 場合 一致する配列です
配列要素は削除されます (` を使用します)(M)' フラグを使用して、一致しない要素を削除します)。

${:|配列名}
If 配列名 配列変数の名前 (内容ではないことに注意してください)、その後任意の
に含まれる要素 配列名 の置換から削除されます 。 もし
置換はスカラーです。 スカラー変数または式です。
の要素が引用されています。 配列名 代わりに全体に対してテストされます
式です。

${:*配列名}
前の置換と似ていますが、逆の意味で、エントリは
元の置換との要素の両方に存在します。 配列名 保持されます
その他は削除されました。

${:^配列名}
${:^^配列名}
XNUMX つの配列を圧縮し、出力配列が最短のものの XNUMX 倍の長さになるようにします。
(` の最長):^^') の   配列名、要素が交互に存在します。
それらの中から選びました。 `の場合:^'、入力配列の XNUMX つが長い場合、出力は
短い方の配列の終わりに達すると停止します。 したがって、

a=(1 2 3 4); b=(a b); 印刷 ${a:^b}

`を出力します1 a 2 b'。 `の場合:^^' の場合、すべての条件が満たされるまで入力が繰り返されます。
長い配列が使い果たされているため、上記の出力は `1 a 2 b 3 a 4 b'.

どちらかまたは両方の入力がスカラーである場合は、長さ 1 の配列として扱われます。
スカラーを唯一の要素として使用します。 どちらかの配列が空の場合、もう一方の配列は
余分な要素を挿入せずに出力します。

現在、次のコードは ` を出力しますa b'と `1' XNUMX つの別々の要素として、
それは予期せぬことかもしれません。 XNUMX 番目の出力には回避策が記載されています。
これが変更されても機能し続けます。

a=(a b); b=(1 2); 印刷 -l "${a:^b}"; 印刷 -l 「${${a:^b}}」

${:オフセット}
${:オフセット:長さ}
この構文は、次の形式でのパラメーターの添字と同様の効果を与えます。
$[start,end]ですが、他のシェルと互換性があります。 どちらも注意してください オフセット  
長さ 添え字のコンポーネントとは異なる方法で解釈されます。

If オフセット が負でない場合、変数 スカラー置換です
内容開始 オフセット 文字列の最初の文字からの文字、および
は配列の置換要素で始まります オフセット 最初からの要素
要素。 もし 長さ 与えられた場合、その数の文字または要素を置き換えます。
それ以外の場合は、スカラーまたは配列の残り全体。

ポジティブ オフセット は常に文字または要素のオフセットとして扱われます。
配列の最初の文字または要素から (これはネイティブ zsh とは異なります)
下付き表記)。 したがって、0 は最初の文字または要素を指します。
オプションの設定の KSH_ARRAYS.

負のオフセットはスカラーまたは配列の末尾から逆方向にカウントするため、-1 になります。
最後の文字または要素などに対応します。

陽性のときは、 長さ から数えます オフセット スカラーの終わりに近い位置
または配列。 ネガティブなときは、 長さ 最後から逆算します。 その結果、
より小さい位置 オフセット、診断が出力され、何も置き換えられません。

オプション マルチバイト に従います。つまり、オフセットと長さはマルチバイトをカウントします。
必要に応じて文字を入力します。

オフセット   長さ スカラーの場合と同じ一連のシェル置換が行われます。
割り当て; さらに、それらは算術評価の対象となります。 したがって、
例えば

印刷 ${foo:3}
印刷 ${foo: 1 + 2}
印刷 ${foo:$(( 1 + 2))}
印刷 ${foo:$(エコー 1 + 2)}

すべて同じ効果があり、次の XNUMX 文字目から始まる文字列が抽出されます。
$ foo それ以外の場合、置換によってスカラー、または次から始まる配列が返される場合
XNUMX 番目の要素の場合 $ foo 配列を返します。 オプションの場合は注意してください
KSH_ARRAYS $ foo (オフセットの使用に関係なく) 常にスカラーを返します。
構文) と次のような形式 $foo[*]:3 配列の要素を抽出するために必要です
命名 foo.

If オフセット が負の場合、 - 直後には表示されない場合があります : このように
を示します ${:-単語} 置換の形式。 代わりにスペースを挿入することもできます
-。 さらに、どちらでもない オフセット また 長さ アルファベットで始まる場合があります
キャラクターまたは & これらは履歴スタイルの修飾子を示すために使用されるためです。 に
変数の値を代入する場合、先頭に次の文字を付けることをお勧めします。
a $ これは意図を示しているため (パラメータ置換は簡単にレンダリングできます)
判読不能); ただし、算術置換が実行されると、式は
${var: オフ} は動作し、オフセットを取得します $オフ.

他のシェルとの互換性をさらに高めるために、配列には特別なケースがあります。
オフセット 0。通常、これは配列の最初の要素にアクセスします。 ただし、
置換は位置パラメータ配列を参照します。例: $@ or $*、次にオフセット
0 は代わりに、 $0、オフセット 1 は以下を参照します $1、 等々。 言い換えれば、
位置パラメータ配列は、先頭に追加することで効果的に拡張されます。 $0。 故に
${*:0:1} 代用品 $0   ${*:1:1} 代用品 $1.

${/パターン/繰り返し}
${//パターン/繰り返し}
可能な限り長く一致するものを置き換えます パターン パラメータの展開で by
string 繰り返し。 最初の形式は最初の出現箇所のみを置き換え、XNUMX 番目の形式は
すべての出来事。 両方 パターン   繰り返し 二重引用符で置換される可能性があります。
そのため、次のような表現が可能になります ${名前/$opat/$npat} 機能しますが、通常のルールに注意してください
そのパターン文字 $opat いずれかのオプションがない限り、特別に扱われません
GLOB_SUBST が設定されている、または $opat 代わりに次のように置き換えられます ${~opat}.

当学校区の パターン ` で始まる場合があります#'、この場合、 パターン 先頭で一致する必要があります
文字列の、または `%' (この場合、文字列の末尾で一致する必要があります)、または
`#%' この場合、 パターン 文字列全体と一致する必要があります。 の 繰り返し かもしれません
空の文字列。この場合、最後の `/'も省略できます。 最後を引用すると
`/' 他の場合は、その前にバックスラッシュを XNUMX つ付ける必要があります。 これではありません
` の場合は必要です/' は置換パラメータ内で発生します。 また、
`#'、 `%'と `#% 置換されたパラメータ内に出現した場合でもアクティブではありません。
開始時。

最初の `/' の前に ` を付けることができます:'、この場合、一致は成功するだけです
単語全体に一致する場合。 の効果にも注目してください。 I   S パラメーター
以下の拡張フラグ。 ただし、フラグ M, R, B, E   N 役に立たない。

たとえば、

foo="きらきら きらめき 少し 星" サブ="t*e" 担当者=「スパイ」
印刷 ${foo//${~sub}/$rep}
印刷 ${(S)foo//${~sub}/$rep}

ここで、`~' のテキストが確実に $sub ではなくパターンとして扱われます
プレーンな文字列。 最初のケースでは、最長一致は が置き換えられ、
結果は `スパイ '、一方、XNUMX 番目のケースでは、最短の一致が取得され、
結果は「スパイ スパイ 舌足らずな '.

$ {#スペック}
If スペック は上記の置換の XNUMX つであり、文字数の長さを置き換えます。
結果そのものではなく、結果です。 もし スペック は配列式です。
結果の要素数を代入します。 これには次のような副作用があります。
引用符で囲まれた形式であっても結合はスキップされるため、他の部分式に影響を与える可能性があります。
スペック。 ` に注意してください^'、 `='、および `~' (以下) は ' の左側に表示される必要があります#' いつ
これらの形式が組み合わされています。

オプションの場合 POSIX_IDENTIFIERS 設定されておらず、 スペック 単純な名前の場合、
中括弧はオプションです。 これは特別なパラメータの場合にも当てはまります。 $#-   $#*
文字列の長さを取得します $- と配列 $* それぞれ。 もしも
POSIX_IDENTIFIERS が設定されている場合は、中括弧が必要です # この中で治療される
ファッション。

${^スペック}
掃除機のスイッチを入れます。 RC_EXPAND_PARAM を評価するためのオプション スペック; `の場合^」は
XNUMX倍になったらオフにします。 このオプションが設定されている場合、次の形式の配列展開が行われます。
foo${xx}バー、ここでパラメータは xx に設定されています (a b c)、で置き換えられます
`フーバー フードバー フードバーデフォルトの ` の代わりにフーア b シーバー'。 空であることに注意してください
したがって、array を使用すると、すべての引数が削除されます。

内部的には、このような展開はそれぞれ中括弧の同等のリストに変換されます。
拡大。 例えば、 ${^var} になる {$var[1],$var[2],...}、として処理されます
これについては、以下の「ブレースの拡張」セクションで説明します。 単語分割も入っている場合
影響を与える $var[N] それ自体が異なるリスト要素に分割される場合があります。

${=スペック}
次のルールを使用して単語分割を実行します。 SH_WORD_SPLIT の評価中に
スペックただし、パラメーターが二重引用符で囲まれているかどうかは関係ありません。 `の場合='
が二重になっている場合はオフにします。 これにより、パラメータ展開が強制的に分割されます。
置換前に単語を区切るには、次を使用します。 IFS 区切り文字として。 これを行うのは、
他のほとんどのシェルではデフォルトです。

分割が適用されることに注意してください 単語 の課題フォームでは スペック  
への割り当て は発表された。 これは、配列の代入の結果に影響します。
  A フラグ。

${~スペック}
掃除機のスイッチを入れます。 GLOB_SUBST を評価するためのオプション スペック; `の場合~' が XNUMX 倍になり、
消して。 このオプションを設定すると、展開後の文字列は次のようになります。
ファイル名など、可能な限りどこでもパターンとして解釈されます。
展開、ファイル名の生成、右手のようなパターン マッチング コンテキスト
`の側面='と `!=' 条件内の演算子。

ネストされた置換では、 ~ の結果に適用されます
現在の代替レベル。 結果に対する周囲のパターン演算により、
キャンセルしてください。 したがって、たとえば、パラメータが foo に設定されています *, ${~foo//\*/*.c}
パターンで置き換えられます *。NS、ファイル名の生成によって拡張される可能性があります。
焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。 ${${~foo}//\*/*.c} 文字列に代入します *。NS、これ以上はありません
拡大しました。

もし ${...} 型パラメータ式または $(...) type コマンド置換は以下で使用されます。
の場所 上記では、最初に展開され、結果が値であるかのように使用されます。
of 。 したがって、ネストされた操作を実行することが可能です。 ${${foo#head}%tail}
の値を置き換えます $ foo 両方の ` 'と `tail' 削除されました。 とのフォーム $(...)
多くの場合、次に説明するフラグと組み合わせて使用​​すると便利です。 以下の例を参照してください。
またはネストされた ${...} パラメータ展開では、後ろに添字を続けることもできます
で説明されている表現 配列 技術パラメータ in zshparamとします。

ネストされた式の周囲に二重引用符が表示される場合があることに注意してください。その場合、その部分のみが表示されます。
内側は引用されたものとして扱われます。 例えば、 ${(f)"$(foo)"} の結果を引用します $(フー)、 だけど
(f)は、' (以下を参照) は、引用符で囲まれていない展開のルールを使用して適用されます。 注記
さらに、このコンテキストでは引用符自体がネストされています。 たとえば、
"${(@f)"$(foo)"}"、引用符のセットが XNUMX つあり、XNUMX つは式全体を囲みます。
周囲のその他の(冗長) $(フー) 従来通り。

拡張 フラグ
左中括弧の直後に左括弧が続く場合は、左括弧までの文字列が
一致する右括弧はフラグのリストとして解釈されます。 を繰り返すケースでは、
flag には意味があり、繰り返しは連続している必要はありません。 たとえば、`(q%q%q)' 手段
より読みやすい`(%%qqq)」。 次のフラグがサポートされています。

# 結果の単語を数値式として評価し、文字を出力します。
結果の整数に対応します。 この形式は完全に異なることに注意してください
の使用から # 括弧なし。

Status マルチバイト オプションが設定されており、その数値が 127 より大きい (つまり、
ASCII 文字)、Unicode 文字として扱われます。

% すべて展開 % プロンプトと同じ方法で結果の単語をエスケープします (「
プロンプトシーケンスの拡張 ズシュミスク(1))。 このフラグが XNUMX 回与えられた場合、フル
プロンプト拡張は、の設定に応じて、結果の単語に対して実行されます。
PROMPT_PERCENT, PROMPT_SUBST   プロンプト_バン オプション。

@ 二重引用符で囲むと、配列要素が別の単語に入れられます。 例:「「${(@)foo}」'
`と同等です「${foo[@]}」'と `「${(@)foo[1,2]}」'は`と同じです「$foo[1]」
「$foo[2]」'。 これは、 フィールド 分裂 を通じて、タンピングされたコーヒーベッドの上から均一にフィルターバスケットの内の粉に浸透していきます。 f, s or z フラグ、それは
各配列要素内でも引き続き適用されます。

A ` で配列パラメータを作成します${...=...}'、 `${...:=...}'または `${...:: =...}'。 もしも
このフラグは繰り返されます (` のように)AA')、連想配列パラメータを作成します。
割り当てはソートまたはパディングの前に行われます。 フィールド分割がアクティブな場合、
単語 パートは代入前に分割されます。 の 部分は添え字付きの範囲である可能性があります
通常の配列。 の 単語しなければなりません たとえば次のようにして配列に変換できます。
`${(AA)==...}' 連想配列の作成時にフィールド分割を有効にします。

a 配列インデックス順に並べ替えます。 `と組み合わせるとO' 配列インデックスを逆順に並べ替えます
注文。 ` に注意してくださいaしたがって、 ' はデフォルトと同等ですが、 `Oa' は便利です
配列の要素を逆の順序で取得します。

b パターン マッチングに特殊な文字のみをバックスラッシュで囲みます。 これ
を使用して変数の内容をテストする場合に便利です。 GLOB_SUBST,
${~...} スイッチ。

のいずれかを使用して引用する q フラグのファミリーはこの目的には機能しません。
引用符は、非パターン文字から削除されません。 GLOB_SUBST。 言い換えると、

パターン=${(q)str}
[[ $ str = ${~パターン} ]]

次の場合に機能します $ str は `a * b' ですが、` の場合はそうではありませんa b'、 一方

パターン=${(b)str}
[[ $ str = ${~パターン} ]]

のすべての可能な値に対して常に true です $ str.

c 自律的AI $ {#}、要素が要素であるかのように、配列内の文字の総数を数えます。
間にスペースを入れて連結されていました。 これは配列の真の結合ではありません。
したがって、このフラグとともに使用される他の式は、
カウントされる前の配列。

C 結果として得られる単語を大文字にします。 この場合の「単語」とは、一連の単語を指します。
英数字以外の文字で区切られた英数字、 結果として出てくる言葉に
フィールド分割から。

D 文字列または配列要素にディレクトリが含まれていると想定し、置換を試みます。
これらの先頭部分を名前で示します。 パスの残りの部分(パスの場合は全体)
先頭部分は置換されませんでした) は、文字列全体が引用符で囲まれるようになります。
シェル引数として使用されます。 これは ` の逆です~' 置換: を参照してください。
以下の「ファイル名拡張」セクションを参照してください。

e 実行する パラメーター 拡大, command 置換   算術 拡大
結果。 このような展開はネストできますが、再帰が深すぎると予測できない問題が発生する可能性があります。
効果。

f 展開結果を改行で分割します。 これは ` の省略形ですps:\n:'.

F 改行を区切り文字として使用して、配列の単語を結合します。 これは
`の省略形pj:\n:'.

g:optsの:
オプションが指定されていない場合、組み込みの echo のようにエスケープ シーケンスを処理します (g ::).
o オプションでは、XNUMX 進数エスケープでは先頭にゼロが付きません。 とともに c オプション、
` のようなシーケンス^X」の処理も行われます。 とともに e オプション、処理 `\山'と
print 組み込みのような同様のシーケンス。 両方とも o   e オプションは、
これらのモードのいずれも ` ではない点を除いて、 print 組み込み関数と同様に動作します。\c'
通訳。

i 大文字と小文字を区別せずに並べ替えます。 `と組み合わせることができますn'または `O'.

k If は連想配列を参照するため、 キー (要素名) むしろ
要素の値よりも。 添え字 (通常の配列を含む) とともに使用されます。
添字形式が参照している場合でも、インデックスまたはキーを強制的に置換します。
価値観。 ただし、このフラグを添え字範囲と組み合わせることはできません。

L 結果内のすべての文字を小文字に変換します。

n XNUMX 進整数を数値的に並べ替えます。 XNUMX つのテストの最初の異なる文字が一致する場合
文字列は数字ではないため、並べ替えは語彙に基づいて行われます。 初期ゼロの数が多い整数は、
少ないもの、またはまったくないものの前に並べ替えられます。 したがって、配列 `foo1 foo02 foo2 foo3
foo20 foo23' は表示された順序でソートされます。 `と組み合わせることができますi'または `O'.

o 結果の単語を昇順に並べ替えます。 これが単独で表示される場合、並べ替えは
字句が異なり、大文字と小文字が区別されます (ロケールによって大文字と小文字が区別されない場合を除く)。
昇順での並べ替えは他の形式の並べ替えのデフォルトであるため、これは
` と組み合わせた場合は無視されますa'、 `i'または `n'.

O 結果の単語を降順に並べ替えます。 `O' なしa'、 `i'または `n' で並べ替えます
語彙順序を逆にします。 `と組み合わせることができますa'、 `i'または `n' 順序を逆にします
仕分けの。

P これによりパラメータの値が強制されます さらに解釈される
パラメータ名。その値は必要に応じて使用されます。 フラグが設定されていることに注意してください
のいずれかと タイプセット コマンドのファミリー (特に変換の場合) は次のとおりです。
の値には適用されません このような形で使われます。

ネストされたパラメータまたはコマンド置換とともに使用した場合、その結果は次のようになります。
同様にパラメータ名として取得されます。 たとえば、` がある場合、foo = bar'と
`バー=バズ'、文字列 ${(P)foo}, ${(P)${foo}}, ${(P)$(エコー バー)} なります
`に展開されるバズ'.

q 結果として得られる単語内のシェルに特殊な文字を引用符で囲みます。
バックスラッシュ; 印刷できない文字または無効な文字は、 $'\NNN' 形、
オクテットごとに個別の引用符を付けます。

このフラグが XNUMX 回指定された場合、結果の単語は一重引用符で囲まれます。
XNUMX 回指定される場合、単語は二重引用符で囲まれます。 これらの形式ではいいえ
印刷できない文字または無効な文字の特別な処理が試行されます。 フラグが
XNUMX 回指定された場合、単語は一重引用符で囲まれ、その前に $。 ご了承ください
これら XNUMX つの形式すべてにおいて、たとえそうでない場合でも、引用は無条件に行われます。
結果の文字列がシェルによって解釈される方法を変更します。

もし q- が与えられます(単一の q が表示される場合があります)、一重引用符の最小形式は次のとおりです。
特殊文字を保護するために必要な場合にのみ文字列を引用符で囲むために使用されます。
通常、この形式は最も読みやすい出力を提供します。

Q 結果の単語から XNUMX レベルの引用符を削除します。

t パラメータの値を表すパラメータのタイプを説明する文字列を使用します。
通常は現れるでしょう。 この文字列は、ハイフン (`) で区切られたキーワードで構成されます。-')。
文字列の最初のキーワードはメインのタイプを表し、次のいずれかになります。スカラー',
`配列'、 `整数'、 `フロート'または `協会'。 他のキーワードはタイプを説明します
さらに詳細に:

ローカル ローカルパラメータの場合

左揃えパラメータの場合

right_blanks
先頭に空白がある右寄せパラメータの場合

right_zeros
先頭にゼロを付けて右寄せされたパラメータの場合

下側 パラメータの値がすべて小文字に変換される場合
拡大

アッパー パラメータの値がすべて大文字に変換される場合
拡大

読み取り専用
読み取り専用パラメータの場合

タグ タグ付きパラメータの場合

export エクスポートされたパラメータの場合

ユニーク 重複した値の最初の出現のみを保持する配列の場合

隠す 「非表示」フラグが設定されたパラメータの場合

ハイドバル
`hideval' フラグが設定されたパラメータの場合

特別
シェルによって定義された特別なパラメータの場合

u 各固有の単語の最初の出現のみを展開します。

U 結果内のすべての文字を大文字に変換します。

v と一緒に使用 k、キーと値の両方を (XNUMX つの連続した単語として) 置き換えます。
各連想配列要素。 添え字と一緒に使用すると、値が強制的に
添え字形式がインデックスまたはキーを参照している場合でも置換されます。

V 結果の単語内の特殊文字を表示します。

w 自律的AI $ {#}、配列または文字列内の単語をカウントします。 の s フラグを使用して、
単語の区切り文字。

W そして w 違いは、繰り返される区切り記号の間に空の単語があることです。
もカウントされます。

X このフラグを使用すると、 Q, e   # フラグまたはパターン
` などの形式に一致する${#パターン}」と報告されている。 フラグがないとエラーが発生する
黙って無視されます。

z シェル解析を使用して展開の結果を単語に分割し、単語を検索します。
つまり、値内の引用符を考慮します。 コメントは処理されません
特に、通常の文字列として、対話型シェルに似ています。
INTERACTIVE_COMMENTS オプションを設定解除します(ただし、 Z 関連するものについては以下のフラグを立ててください
オプション)

これは非常に遅く、` よりも遅く行われることに注意してください。(S)' フラグ。 それでアクセスするには
結果内の単一の単語では、` のようにネストされた展開が使用されます。${${(z)foo}[2]}'。 同じく、
結果の単語から引用符を削除するには ` を使用します${(Q)${(z)foo}}'.

0 展開の結果を null バイトで分割します。 これは ` の省略形ですps:\0:'.

次のフラグ (除く) p) の後には、示されているように XNUMX つ以上の引数が続きます。 どれでも
文字、または一致するペア `(...)'、 `{...}'、 `[...]'、または `<...>' で使用される場合があります。
区切り文字としてコロンを置きますが、フラグが複数の引数を取る場合、
一致する区切り文字のペアで各引数を囲む必要があります。

p と同じエスケープシーケンスを認識します 印刷 組み込みの文字列引数
この引数に続く、以下で説明するフラグの一部。

あるいは、このオプションを使用すると、文字列引数を次の形式にすることもできます。 $VAR その中で
変数の値が代入される場合。 この形式は厳密であることに注意してください。 の
文字列引数は一般的なパラメータ展開を受けません。

たとえば、

sep=:
val=a:b:c
印刷 ${(ps.$sep.)val}

変数を :.

~ 以下のフラグのいずれかによって展開に挿入された文字列は、次のように扱われます。
パターン。 これは、後続のフラグの文字列引数に適用されます。 ~ 中で
同じ括弧のセット。 と比べて ~ 括弧の外側で強制的に
置換された文字列全体がパターンとして扱われます。 したがって、たとえば、

[[ 「?」 = ${(~j.|.)配列} ]]

`を扱います|' をパターンとして使用し、次の場合にのみ成功します。 $配列 文字列「`」が含まれています?'
要素として。 の ~ 繰り返して動作を切り替えることができます。 その効果のみ
括弧で囲まれたグループの最後まで続きます。

j:string:
を使用して配列の単語を結合します。 string セパレータとして。 これに注意してください
によるフィールド分割の前に発生します。 s:string: 旗または SH_WORD_SPLIT オプションを選択します。

l:::string1::string2:
結果の単語を左側に埋め込みます。 各単語は必要に応じて切り詰められます。
畑に置かれた 文字幅が広い。

議論 :string1:   :string2: はオプションです。 どちらでも、最初でも、両方でも構いません
与えられる。 それぞれの区切り文字には同じペアを使用する必要があることに注意してください。
XNUMX つの引数。 左側のスペースは次のように埋められます string1 (連結された
必要なだけ) またはスペースの場合 string1 は与えられない。 両方の場合 string1   string2
与えられ、 string2 各単語のすぐ左側に XNUMX 回挿入され、次の場合は切り捨てられます。
必要な、前に string1 残りのパディングを生成するために使用されます。

どちらかの場合 string1 or string2 存在しますが空です、つまり区切り文字が XNUMX つあります
その時点で一緒に、の最初の文字 $IFS 代わりに使用されます。

Status マルチバイト オプションが有効な場合、フラグは m を与えることもできますが、その場合は
幅はパディングの計算に使用されます。 それ以外の場合は個別のマルチバイト
文字は幅の XNUMX 単位を占めるものとして扱われます。

Status マルチバイト オプションは有効ではないため、文字列内の各バイトは次のように扱われます。
幅の XNUMX 単位を占めます。

制御文字は常に XNUMX ユニット幅であると想定されます。 これにより、
制御文字の繰り返しを生成するために使用されるメカニズム。

m いずれかのフラグと一緒にのみ有効です l or r またはと # 長さ演算子
マルチバイト オプションが有効になっています。 によって報告された文字幅を使用します。
文字列のどのくらいを占めるか、または全体の長さを計算するシステム
文字列。 ほとんどの印刷可能な文字の幅は XNUMX 単位ですが、
アジアの文字セットと特定の特殊効果では幅の広い文字が使用されます。 組み合わせる
文字の幅はゼロです。 印刷できない文字は任意にカウントされます。
幅ゼロ。 実際にどのように表示されるかは異なります。

Status m が繰り返されると、文字は (幅がゼロの場合) ゼロとしてカウントされるか、そうでない場合のいずれかです。
XNUMXつ。 印刷可能な文字列の場合、これは文字列の数をカウントする効果があります。
グリフ (目に見えて別々の文字)、ただし結合する場合を除く
文字自体の幅はゼロではありません (特定のアルファベットでは当てはまります)。

r:::string1::string2:
As lただし、右側の単語を埋めて挿入します。 string2 のすぐ右に
パディングされる文字列。

左右のパディングを一緒に使用することもできます。 この場合の戦略は次のとおりです。
左側は結果の各単語の最初の半幅にパディングされ、右側はパディングされます。
後半への水増し。 パディングされる文字列の幅が奇数の場合、追加の
パディングは左側に適用されます。

s:string:
セパレータでの力場分割 string。 注意してください。 string XNUMXつ以上の
文字は、すべての文字が順番に一致する必要があることを意味します。 これは
内の XNUMX つ以上の文字の扱い IFS パラメータ。 も参照してください。 = フラグと
  SH_WORD_SPLIT オプション。 空の文字列を指定することもできます。その場合、
文字は別の要素になります。

歴史的な理由により、空の配列要素が保持される通常の動作
二重引用符の内側は、分割によって生成された配列では無効になります。 従って
次のとおりです。

line="XNUMX::XNUMX"
印刷 -l 「${(s.:.)行}」

の XNUMX 行の出力が生成されます。 XNUMXつ   空のフィールドを省略します。 に
この動作をオーバーライドするには、` を指定します(@)' フラグも同様に、つまり 「${(@s.:.)行}」.

Z:optsの:
As z ただし、次のペアの間のオプション文字の組み合わせを取ります。
区切り文字。 オプションを指定しない場合、効果は同じです z. (Z+c+) 原因
コメントは文字列として解析されて保持されます。 結果の配列内の任意のフィールド
引用符で囲まれていないコメント文字で始まるものはコメントです。 (Z+C+) コメントを引き起こす
解析して削除する必要があります。 コメントのルールは標準です。
のXNUMX文字目で始まる単語 $HISTCHARS、 デフォルト #、次まで
改行はコメントです。 (Z+n+) 引用符で囲まれていない改行は通常のものとして扱われます
それ以外の場合は、空白文字はシェルコードの区切り文字であるかのように扱われ、
セミコロンに変換されます。 オプションは同じ区切り文字セット内で結合されます。
例えば (Z+Cn+).

_:フラグ:
アンダースコア (_) フラグは将来の使用のために予約されています。 zsh のこのリビジョンでは、
有効なものはありません フラグ; アンダースコアに続くもの (空以外)
区切り文字のペアはエラーとして扱われ、フラグ自体は効果がありません。

次のフラグは、 ${...#...} or ${...%...} フォーム。 の S   I
フラグは、 ${.../...} フォーム。

S 部分文字列だけでなく、先頭や末尾も検索します。 と # 最初から始める
とと % 文字列の末尾から開始します。 による置換あり ${.../...} or
${...//...}、貪欲でないマッチングを指定します。つまり、
最長一致を置き換える必要があります。

I::
検索 番目の試合 (ここで 数値として評価されます)。 これは次の場合にのみ適用されます
部分文字列を検索します。 S フラグ、または ${.../...} (だけ
番目の一致が置き換えられます) または ${...//...} (からのすべての一致 次は
置き換えられました)。 デフォルトでは、最初に一致したものが採用されます。

当学校区の 番目の一致は、それぞれの一致が XNUMX つまたは XNUMX になるようにカウントされます。
グローバル置換一致の場合でも、文字列内の開始位置
重複する以前の置換は無視されます。 とともに ${...%...}   ${...%%...}
が形成されると、試合の開始位置が終了位置から後方に移動します。
インデックスは増加しますが、他の形式では最初から前に進みます。

したがって、文字列では
which スイッチ is   スイッチ イプスウィッチ?
形式の置換 ${(はい:N:)文字列#w*ch} as N 1 からの増加が一致します
そして`を削除してくださいwhich'、 `魔女'、 `魔女'と `ウィッヒ'; `を使用したフォーム##' が一致し、
`を削除しますwhich スイッチ is   スイッチ イプスウィッチ'、 `魔女 is   スイッチ
イプスウィッチ'、 `魔女 イプスウィッチ'と `ウィッヒ'。 `を使用した形式%' を削除します
` と同じ一致#' を使用しますが、順序は逆であり、' を使用した形式です。%%' は削除します
` と同じ一致##' 逆の順序で。

B 結果には、一致の開始位置のインデックスが含まれます。

E 結果には、一致の終了のインデックスが含まれます。

M 一致した部分を結果に含めます。

N 結果には試合の長さが含まれます。

R 一致しない部分を結果に含めます ( REST(東部基準時)。

ルール
以下に置換ルールの概要を示します。 これは中括弧が存在することを前提としています
置換の周り、すなわち ${...}。 いくつかの特定の例を以下に示します。 注記
Zsh Development Group が受け入れること いいえ 責任 脳の損傷に備えて
以下のルールを読んでいるときに発生します。

1. 入れ子になった 置換
複数ネストされている場合 ${...} フォームが存在する場合、置換は
内側から外側へ。 各レベルで、置換では次のことが考慮されます。
現在の値はスカラーまたは配列であり、置換全体が double であるかどうかは関係ありません。
引用符、および現在の置換レベルに提供されるフラグ。
ネストされた置換が最も外側の場合。 フラグは次まで伝播されません。
置換を囲む。 ネストされた置換はスカラーまたは
フラグによって決定される配列。引用用に調整される可能性があります。 以下のすべて
該当する場合は、すべてのレベルの置換で手順が実行されます。 ただし、
`(P)' フラグが存在する場合、フラグと添字は値に直接適用されます。
入れ子になった置換の。 たとえば、拡張 ${${フー}} 正確に行動する
と同じ ${フー}.

置換の入れ子になった各レベルで、置換された単語はあらゆる形式の変換を受けます。
コマンドを含む単一単語の置換 (つまり、ファイル名の生成ではない)
置換、算術拡張、およびファイル名拡張 (つまり、先頭 ~   =).
したがって、たとえば、 ${${:-=猫}:h} ディレクトリに展開されます。 cat プログラム
が住んでいる。 (説明: 内部置換にはデフォルト以外のパラメータがありません
=猫、ファイル名展開によってフルパスに展開されます。 外側の
置換により修飾子が適用されます :h のディレクトリ部分を取得します
パス。)

2. インナー パラメーター フラグ
次のいずれかによって設定されたパラメータ フラグ タイプセット コマンドファミリー、特に
L, R, Z, u   l パディングと大文字化のフラグは、
パラメータ値。 これらのフラグはコマンドのオプションであることに注意してください。例: `タイプセット -Z';
これらは、パラメータ置換内で使用されるフラグとは異なります。

3. 添字付け
値が下付き文字を含む生のパラメータ参照の場合、次のようになります。 ${VAR[3]}
添字の効果はパラメータに直接適用されます。 添え字は
左から右に評価されます。 後続の添字はスカラー値または配列値に適用されます
前の添え字によって得られます。 したがって、もし VAR 配列です。 ${var[1][2]}
最初の単語の XNUMX 文字目ですが、 ${var[2,4][2]} XNUMX番目の単語全体です
(元の配列のワード XNUMX ~ XNUMX の範囲の XNUMX 番目のワード)。
下付き文字はいくつでも表示できます。 などのフラグ (K)   (V) それは
添え字の結果が適用されます。

4. 置換
どれかの効果 (P) flag、これまでの値をパラメータ名として扱います。
対応する値に置き換えて適用されます。

5. 二重引用符で囲まれた 参加
この処理後の値が配列で、置換がdoubleで現れる場合
引用符も、 (@) 旗も無い # 長さ演算子は現在存在します
レベルに応じて、値の単語がパラメータの最初の文字と結合されます。
$IFS、デフォルトでは各単語の間にスペースが入ります (単一の単語の配列は変更されません)。
Status (J) フラグが存在します。これは、結合の代わりに使用されます。 $IFS.

6. 入れ子になった 添字付け
残りの添え字 (つまり、ネストされた置換) はこの時点で評価されます。
値が配列であるかスカラーであるかに基づいてポイントを決定します。 同様に 3.、複数
下付き文字が表示される場合があります。 ご了承ください ${foo[2,4][2]} したがって、次と同等です
${${foo[2,4]}[2]} そしてまた 「${${(@)foo[2,4]}[2]}」 (入れ子になった置換
どちらの場合も配列を返します)が、そうではありません 「${${foo[2,4]}[2]}」 (入れ子になった
引用符があるため、置換はスカラーを返します)。

7. 修飾子
末尾の ` で指定された任意の修飾子#'、 `%'、 `/' (おそらく XNUMX 倍) または
フォームの修飾子のセット :... (「修飾子」セクションを参照してください。
`履歴拡張') は、このレベルの値の単語に適用されます。

8. 人格 評価
任意 (#) flag が適用され、これまでの結果を文字として数値的に評価します。

9. 長さ
任意のイニシャル # 修飾子、つまり次の形式で $ {#VAR}、の長さを評価するために使用されます。
ここまでの表現。

10. 強制的な 参加
`の場合(J)' フラグが存在する、または ` が存在しない(J)' フラグは存在しますが、文字列は
ルールに従って分割する 11.、ステップで参加は行われませんでした 5.、内の任意の単語
値は、指定された文字列または最初の文字を使用して結合されます。 $IFS
何もない場合。 `(F)' フラグは、これに結合するための文字列を暗黙的に提供します。
方法。

11. 簡単な拡張で 単語 分裂
` のいずれかが(S)'または `(f)は、' フラグが存在するか、または '=' 指定子が存在しました
(例えば ${=VAR})、単語は指定された文字列の出現時に分割されます、または ( =
XNUMX つのフラグがどちらも存在しない場合) のいずれかの文字 $IFS.

いいえの場合は `(S)'、 `(f)は、'または `=' が指定されましたが、単語が引用符で囲まれておらず、オプション
SH_WORD_SPLIT が設定されている場合、単語は次の文字のいずれかが出現すると分割されます。
$IFS。 このステップも、ネストされた置換のすべてのレベルで実行されることに注意してください。

12. シミュレーション例 変形
いずれかのフラグによる大文字と小文字の変更 (L), (U) or (C) 適用される。

13. エスケープ シーケンス 置換
まず、からの代替品 (G) フラグが実行された後、任意のプロンプト スタイル
からの書式設定 (%) フラグのファミリーが適用されます。

14. 見積もり
を使用した引用または引用解除 (Q)   (Q) 関連するフラグが適用されます。

15. ディレクトリ 命名
を使用したディレクトリ名の置換 (D) フラグが適用されます。

16. 透明性 強化
を使用して文字を表示できるようにするための変更 (V) フラグが適用されます。

17. 語彙 単語 分裂
'の場合(z)' フラグまたは ' の形式の XNUMX つ(Z)' フラグが存在し、単語は
シェルコマンドラインであるかのように分割するため、引用符やその他の
メタキャラクターは、単語を構成するものを決定するために使用されます。 この形式に注意してください
分割はルールによって記述される分割とは完全に異なります 11.:使用しません
$IFS、強制的な参加は発生しません。

18. 独自性
結果が配列であり、`(ウ)' フラグが存在しました。重複した要素はあります
配列から削除されました。

19. 購入
結果が依然として配列であり、 `(O)'または `(O)' フラグが存在していました。
配列の順序が変更されます。

20. RC_EXPAND_PARAM
この時点で、結果の配列要素を追加するかどうかが決定されます。
次のいずれかで指定されるように、要素ごとに周囲のテキストと結合されます。
RC_EXPAND_PARAM オプションまたは `^' 国旗。

21. 再評価
任意の `(e)の' フラグが値に適用され、新しい値について強制的に再検査されます。
パラメータ置換だけでなく、コマンドおよび算術置換も同様です。

22. パディング
` による値のパディング(l.埋める.)'または `(r.埋める.)' フラグが適用されます。

23. セマンティック 参加
展開セマンティクスが結果として XNUMX つの単語を必要とするコンテキストでは、すべての単語が
の最初の文字で再結合されます IFS 間。 したがって、「」では${(P)${(f)行}}'
の値 ${行} 改行で分割されますが、その前に再度結合する必要があります
  P フラグを適用することができます。

単一の単語が必要ない場合、このルールはスキップされます。

24. 空の 引数 除去
置換が二重引用符で囲まれていない場合、結果として得られる長さはゼロになります。
引数は、スカラーであっても配列の要素であっても、リストから削除されます。
コマンドラインに挿入された引数。

厳密に言えば、他のフォームでも同様に削除は後で行われます。
置換の。 ここで注意すべき点は、単に、次のいずれかの後に発生するということです。
上記のパラメータ操作。


f 二重引用符で囲まれた置換を行ごとに分割するのに便利です。 例えば、
${(f)"$(file)"} の内容を置き換えます file 各行が要素になるように分割される
結果の配列の。 これを次の効果と比較してください。 $(file) 単独では、
単語ごとにファイルするか、同じ内容を二重引用符で囲みます。これにより、コンテンツ全体が
単一の文字列をファイルします。

以下に、ネストされたパラメータ展開のルールを示します。 仮定 $ foo
配列が含まれています (バー バズ):

「${(@)${foo}[1]}」
これにより結果が得られます b。 まず、内部置換 「${フー}」、ありません
配列(@) フラグ、単一の単語の結果を生成します "バー バズ」。 外側の置換
「${(@)...[1]}」 は、これがスカラーであることを検出します。そのため、(` にもかかわらず)(@)' フラグ)
添え字は最初の文字を選択します。

「${${(@)foo}[1]}」
これにより、結果が生成されます `バー'。 この場合、内部置換は 「${(@)foo}」
配列 ` を生成します(バー バズ)'。 外側の置換 「${...[1]}」 それを検出します
これは配列であり、最初の単語を選択します。 これは単純なケースと似ています
「${foo[1]}」.

単語の分割と結合のルールの例として、次のように仮定します。 $ foo 配列が含まれています
`(ax1 bx1)'。 それから

${(s/x/)foo}
`という言葉を生成しますa'、 `1 b'と `1'.

${(j/x/s/x/)foo}
`を生成しますa'、 `1'、 `b'と `1'.

${(s/x/)foo%%1*}
`を生成しますa'と ` b' (余分なスペースに注意してください)。 置換はどちらかの前に行われるため、
結合または分割の場合、操作では最初に変更された配列が生成されます。 (斧 bx),
与えるために結合されたもの "斧 bx」、そして分割して `a'、 ` b「」と「」。 の
最後の空の文字列は二重引用符で囲まれていないため、削除されます。

COMMAND 代替


` のように、括弧で囲まれ、その前にドル記号が付いているコマンド$(...)'、または引用符で囲む
` のような重大なアクセント`...`' は、末尾にあるものを含めた標準出力に置き換えられます。
改行は削除されました。 置換が二重引用符で囲まれていない場合、出力は次のようになります。
を使って言葉に分解すると、 IFS パラメータ。 置換 `$(猫 foo)' は置き換えられる可能性があります
同等だが高速な `$(foo)'。 いずれの場合でも、オプションがあれば、 GLOB_SUBST 設定され、
出力はファイル名生成の対象になります。

算術 拡張


` という形式の文字列$[EXP]'または `$((EXP))' は、
算術式 EXP. EXP の影響を受ける パラメーター 拡大, command 置換
  算術 拡大 評価される前に。 「算術評価」セクションを参照してください。

ブレース 拡張


` という形式の文字列foo{xx,yy,zz}バー' は個々の単語に展開されます `フォックスバー',
`フーイバー'と `フーズバー'。 左から右の順序は維持されます。 この構造は次のようになります。
入れ子になった。 文字通り単語にカンマを含めるには、カンマを引用符で囲むことができます。

` という形式の式{n1..n2}'、 どこ n1   n2 は整数であり、次のように展開されます。
間の数字 n1   n2 包括的な。 いずれかの数値がゼロで始まる場合、すべての
結果の数値は、その最小幅まで先頭にゼロが埋め込まれますが、
負の数 - 文字も幅に含まれます。 数字が入っていれば
降順では、結果のシーケンスも降順になります。

` という形式の式{n1..n2..n3}'、 どこ n1, n2, n3 整数、展開される
上記と同様ですが、すべての場合のみ n3から始まる番号 n1 が出力されます。 もしも n3 はマイナスです
数値は逆順に出力されますが、これは単純に入れ替えるのとは少し異なります。 n1
  n2 ステップの場合 n3 範囲を均等に分割しません。 ゼロパディングは可能です
XNUMX つの数値のいずれかで指定すると、XNUMX 番目の数値で指定すると、パディングに便利です。
例 `{-99..100..01}'どちらかに0を入れても指定できません。
最初の XNUMX つの数字 (つまり、XNUMX 文字に埋め込みます)。

` という形式の式{c1..c2}'、 どこ c1   c2 単一の文字です (
マルチバイト文字)、以下の範囲内のすべての文字に展開されます。 c1 〜へ c2 in
内部で使用される任意の文字シーケンス。 コードポイントが 128 未満の文字の場合
これは US ASCII です (ほとんどのユーザーが必要とするのはこれだけです)。 介入がある場合
文字は印刷可能ではないため、適切な引用符を使用して印刷可能にします。 もし
文字シーケンスが逆になると、出力も逆順になります。例: `{d..a}」は
`として置き換えますd c b a'.

中括弧式が上記のいずれの形式にも一致しない場合、中括弧式は変更されない限り、変更されないままになります。
オプション BRACE_CCL (「中括弧文字クラス」の略)が設定されます。 その場合、それは
は、中括弧の間にある個々の文字のリストに展開され、
ASCII 文字セット内の文字の順序 (マルチバイト文字は現在サポートされていません)
取り扱います)。 構文は次のようになります。 [...] ファイル名生成の式: `-」は
文字の範囲を表すために特別に扱われますが、`^'または `!' を最初の文字として使用
普通に扱われます。 たとえば、「{abcdef0-9}' は 16 単語に展開されます 0 1 2 3 4 5 6 7 8 9 a
b c d e f.

中括弧の展開はファイル名の生成 (グロビング) の一部ではないことに注意してください。 表現
など */{foo,bar} XNUMX つの別々の単語に分割される */ふー   */バー ファイル名の前に
世代が発生します。 特に、これにより「一致なし」が発生する可能性があることに注意してください。
エラーの場合 どちら XNUMX つの式のうち一致しません。 これは対照的です
*/(foo|bar)、これは単一のパターンとして扱われますが、それ以外の点では同様の効果があります。

中括弧の拡張と配列の拡張を組み合わせるには、 ${^スペック} に記載されているフォーム
上のセクション「パラメータ拡張」。

ファイル名 拡張


各単語が引用符で囲まれていない ` で始まっているかどうかがチェックされます。~'。 そうであれば、その言葉は
`まで/'、または ' がない場合は単語の末尾/' できるかどうかがチェックされます。
ここで説明する方法のいずれかで置き換えます。 そうであれば、`~'とチェックされた
部分は適切な代替値に置き換えられます。

`~' 自体は次の値に置き換えられます。 $ HOME。 ああ~' の後に `+' または `-」は
それぞれ、現在の作業ディレクトリまたは以前の作業ディレクトリに置き換えられます。

`~' に続く数字は、ディレクトリ内のその位置にあるディレクトリに置き換えられます。
スタック。 `~0'は `と同等です~+'、および `~1' がスタックの最上位です。 `~+' の後に
番号は、ディレクトリ スタック内のその位置にあるディレクトリに置き換えられます。 `〜+ 0」は
`に相当~+'、および `〜+ 1' がスタックの最上位です。 `~-' の後に数字が続くのは、
スタックの一番下から何番目のディレクトリに置き換えられます。 `〜-0' それは
スタックの一番下。 の PUSHD_MINUS オプションは ` の効果を交換します~+'と `~-' どこ
その後に数字が続きます。

ダイナミック 命名 ディレクトリ
関数が zsh_ディレクトリ名 存在するか、シェル変数
zsh_ディレクトリ名_関数 が存在し、関数名の配列が含まれている場合、
関数は、動的なディレクトリ命名を実装するために使用されます。 関数は次で試行されます
ステータス XNUMX が返されるまで順序付けされるため、関数がステータス XNUMX を返すかどうかをテストすることが重要です。
問題のケースを処理し、適切なステータスを返すことができます。

`~' の後に文字列が続く ナムストラ 引用符で囲まれていない角括弧内は、特別に扱われます。
動的ディレクトリ名。 最初の引用符で囲まれていない右角括弧は常に、
終わる ナムストラ。 シェル関数には XNUMX つの引数が渡されます: 文字列 n (名前用)
  ナムストラ。 配列を設定する必要があります 返信 単一の要素に、
名前に対応するディレクトリを返し、ステータス XNUMX を返します (割り当てを
通常は最後のステートメントで十分です)、そうでない場合はゼロ以外のステータスを返す必要があります。 前者で
Reply の要素がディレクトリとして使用される場合。 後者の場合、置換は次のようになります。
失敗したとみなされる。 すべての機能が失敗し、オプションが 勝ち目がない 設定されている場合はエラーになります
結果。

上記のように定義された関数は、ディレクトリをディレクトリに変換できるかどうかを確認するためにも使用されます。
たとえば、ディレクトリスタックを出力するときや展開するときの名前。 %~ プロンプトで。 の
この場合、各関数には XNUMX つの引数 (文字列) が渡されます。 d (ディレクトリの場合) および
動的命名候補。 関数は、次の場合にゼロ以外のステータスを返す必要があります。
関数でディレクトリに名前を付けることはできません。そうでない場合は、配列応答を次のように設定する必要があります。
XNUMX つの要素: XNUMX つ目はディレクトリの動的名です (
`~[...]')、XNUMX 番目は置換されるディレクトリのプレフィックス長です。 ために
たとえば、試用版ディレクトリが /ホーム/私の名前/src/zsh そしてその動的な名前は
/ホーム/私の名前/ソース (16文字あります) s、次に関数セット

返信=(s 16)

返されたディレクトリ名は、ディレクトリの一部の静的名と比較されます。
以下で説明するディレクトリ パス。 プレフィックス長が一致した場合に使用されます (例では 16)。
例) は、どの静的名前と一致するものよりも長いです。

関数が両方を実装する必要はありません。 n   d 電話をかける。 たとえば、それ
名前に短縮されない特定の動的形式の展開には適切な場合があります。
その場合、最初の引数を指定した呼び出しはすべて d ゼロ以外のステータスが発生するはずです
戻ってきた。

補完システムは ` を呼び出しますzsh_ディレクトリ名 c' の後に同等の呼び出しが続く
配列の要素 zsh_ディレクトリ名_関数存在する場合は、完了するために
ディレクトリの動的な名前。 このコードは他の補完と同じである必要があります
で説明されているように機能します zshcompsysとします。

実用的な例として、以下で始まる動的名を展開する関数を示します。
string p: 以下のディレクトリへ /home/pws/perforce。 この単純なケースでは、静的な名前が
ディレクトリも同様に効果的です。

zsh_ディレクトリ名() {
エミュレートする -L zsh
セトプト 拡張グロブ
ローカル -a match 始まります 修復
if [[ $1 = d ]]; その後
# ターン   ディレクトリにジョブを開始します。 a
if [[ $2 = (#b)(/home/pws/perforce/)([^/]##)* ]]; その後
タイプセット -が 返信
Reply=(p:$match[2] $(( ${#match[1]} + ${#match[2]} )) )
ほかに
return 1
fi
elif [[ $1 = n ]]; その後
# ターン   a ディレクトリにジョブを開始します。
[[ $2 != (#b)p:(?*) ]] && return 1
タイプセット -が 返信
Reply=(/home/pws/perforce/$match[1])
elif [[ $1 = c ]]; その後
# コンプリート
ローカル エキスパート
ローカル -a Dirs
dirs=(/home/pws/perforce/*(/:t))
dirs=(p:${^dirs})
_欲しかった 動的ディレクトリ エキスパート '動的 ディレクトリ' コンパッド -S\] -a Dirs
return
ほかに
return 1
fi
return 0
}

静的 命名 ディレクトリ
`~' の後に、任意の数の英数字で構成されるまだカバーされていないものが続きます
文字またはアンダースコア (`_')、ハイフン(`-')、またはドット (`.') は名前付きとして検索されます
ディレクトリに格納され、見つかった場合はその名前付きディレクトリの値に置き換えられます。 名前付きディレクトリ
通常、システム上のユーザーのホーム ディレクトリです。 また、次の場合にも定義できます。
` の後のテキスト~' は、値が ` で始まる文字列シェル パラメータの名前です。/'.
末尾のスラッシュはディレクトリへのパスから削除されることに注意してください (ただし、
元のパラメータは変更されません)。

を使用してディレクトリ名を定義することもできます。 -d オプションを ハッシュ 内蔵。

シェルがパスを出力するとき (展開するときなど) %~ プロンプト内または印刷時
ディレクトリ スタック)、パスがチェックされて、プレフィックスとして名前付きディレクトリがあるかどうかが確認されます。
そうであれば、プレフィックス部分は ` に置き換えられます。~' の後に名前が続きます
ディレクトリ。 ディレクトリを参照する XNUMX つの方法のうち短い方が使用されます。つまり、
ディレクトリ名またはフルパス。 同じ長さの場合、名前が使用されます。 の
パラメータ $障害者   $ OLDPWD このように省略されることはありません。

「=」 拡大
単語が引用符で囲まれていない ` で始まる場合=' そしてその 等しい オプションが設定されている場合、残りの部分は
word はコマンド名として解釈されます。 その名前のコマンドが存在する場合、その単語は次のようになります。
コマンドの完全なパス名に置き換えられます。

Notes
ファイル名の展開はパラメータ割り当ての右側で実行されます。
のコマンドの後に表示されるものを含む タイプセット 家族。 この場合、右
ハンド側は、次の方法でコロンで区切られたリストとして扱われます。 パス パラメータ、
` になるように~' または `=` に続く ':』が拡張対象となります。 そのようなすべての行動は、
` を引用符で囲むことで無効にできます~'、'='、または式全体 (ただし、単に
結腸); の 等しい オプションも尊重されます。

オプションの場合 MAGIC_EQUAL_SUBST 設定されている場合、フォーム内の引用符で囲まれていないシェル引数
`識別子=表現' は、前で説明したようにファイル拡張の対象になります。
段落。 最初の ` を引用すると、='もこれを抑制します。

ファイル名 GENERATION


単語に引用符で囲まれていない文字「`」が含まれている場合*'、 `('、 `|'、 `<'、 `[',
または `?' の場合、それはファイル名生成のパターンとみなされます。 グロブ オプションがある
設定を解除します。 もし EXTENDED_GLOB オプションが設定されている場合、`^'と `#' 文字は、
パターン; それ以外の場合、それらはシェルによって特別に扱われません。

この単語は、パターンに一致する並べ替えられたファイル名のリストに置き換えられます。 いいえの場合
一致するパターンが見つかった場合、シェルはエラー メッセージを表示します。 NULL_GLOB オプション
が設定されている場合、単語は削除されます。 または、 勝ち目がない オプションが設定されていない場合、
単語が変更されない場合。

ファイル名の生成では、文字 `/' は明示的に一致する必要があります。 また、`.' でなければなりません
パターンの先頭または ` の後で明示的に一致する/'、ただし、 GLOB_DOTS
オプションが設定されています。 ファイルに一致するファイル名生成パターンがありません `.'または `..'。 その他では
パターン マッチングのインスタンス、`/'と `.」は特別扱いされません。

グロブ オペレーター
* NULL 文字列を含む任意の文字列と一致します。

? どんな文字にもマッチします。

[...] 囲まれた文字のいずれかと一致します。 文字の範囲は次のように指定できます。
XNUMX つの文字を ` で区切る-'。 ああ-'または `]' を次のように含めることで一致する可能性があります
リストの最初の文字。 いくつかの名前付きクラスもあります
` の形式の文字[::]' は以下の意味を持ちます。 初回セット利用
指定された文字をテストするためにオペレーティング システムによって提供されるマクロ
ローカル言語設定による変更を含む組み合わせについては、「」を参照してください。
CTYPE(3):

[:alnum:]
文字は英数字です

[:アルファ:]
文字はアルファベットです

[:ascii:]
文字は 7 ビットです。つまり、最上位ビットを除いたシングルバイト文字です。
設定します。

[:空欄:]
文字はスペースまたはタブのいずれかです

[:cntrl:]
キャラクターは制御キャラクターです

[:桁:]
文字は XNUMX 進数です

[:グラフ:]
文字は空白以外の印刷可能な文字です

[:低い:]
文字は小文字です

[:print:]
文字は印刷可能です

[:punct:]
文字は印刷可能ですが、英数字でも空白でもありません

[:スペース:]
文字は空白です

[:アッパー:]
文字は大文字です

[:x桁:]
文字は XNUMX 進数です

名前付きクラスの別のセットはシェルによって内部的に処理され、
ロケールに依存します:

[:ID:]
この文字は、シェル識別子の一部を形成することができます。
パラメータ名

[:IFS:]
この文字は入力フィールドの区切り文字として使用されます。つまり、
IFS パラメーター

[:IFSSPACE:]
この文字は IFS 空白文字です。 のドキュメントを参照してください IFS
会場は zshparam(1)マニュアルページ。

[:不完全な:]
不完全なマルチバイト文字の開始バイトと一致します。 ご了承ください
結合された複数のバイトのシーケンスが存在する場合があります。
マルチバイト文字のプレフィックス。 不完全な可能性のあるバイトをテストするには
シーケンス、パターン ` を使用します[[:不完全な:]]*'。 これは決して一致しません
有効なマルチバイト文字で始まるシーケンス。

[:無効:]
有効なマルチバイト文字の先頭ではないバイトと一致します。 これに注意してください
不完全なマルチバイト文字の継続バイトを任意の部分として指定できます。
無効かつ不完全なマルチバイトで構成されるマルチバイト文字列の
文字はシングルバイトとして扱われます。

[:言葉:]
文字は単語の一部として扱われます。 このテストは以下の影響を受けやすいです
の値 ワードチャーズ パラメーター

角括弧は、一連のセット全体を囲む括弧に追加されることに注意してください。
文字なので、単一の英数字をテストするには ` が必要です[[:alnum:]]'.
名前付き文字セットは、他のタイプと一緒に使用できます。例: `[[:アルファ:]0-9]'.

[^...]
[!...] いいね [...]ただし、指定されたセットに含まれない文字と一致する場合を除きます。

<[x]-[y]>
範囲内の任意の数値と一致します x 〜へ y、包括的。 どちらかの数字が考えられます
範囲を無制限にするために省略されます。 したがって、`<->' は任意の数値に一致します。 合わせる
個々の数字、 [...] フォームの方が効率的です。

この形式のパターンに隣接して他のワイルドカードを使用する場合は注意してください。 ために
例、 <0-9>* 実際には、先頭の任意の数値と一致します。
` 以降の文字列<0-9>' は最初の数字と一致し、`*' はどれにも一致します
その他。 これは不注意な人にとっての罠ですが、実際には避けられない結果です。
可能な限り最長の一致が常に成功するというルール。 などの表現
`<0-9>[^[:数字:]]*' を代わりに使用できます。

(...) 囲まれたパターンと一致します。 これはグループ化に使用されます。 もし KSH_GLOB オプション
が設定されている場合、`@'、 `*'、 `+'、 `?'または `!' の直前に(' が扱われます
特に、以下で詳しく説明します。 オプション SH_GLOB 裸の括弧が
このように使用されていますが、 KSH_GLOB オプションはまだ利用可能です。

グループ化は複数のディレクトリにまたがることはできないことに注意してください。
`/' グループ内で使用できます (これはファイル名生成で使用されるパターンにのみ適用されます)。
例外が XNUMX つあります。それは、次の形式のグループです。 (パット/)# 完全なパスとして表示される
セグメントは、一連のディレクトリと一致する可能性があります。 例えば、 foo/(a*/)#bar マッチ
foo / bar, foo/any/bar, foo/任意の/任意の/バー、などなど。

x|y どちらかに一致します x or y。 この演算子は他の演算子より優先順位が低くなります。 `|'
パイプラインとして解釈されるのを避けるために、文字は括弧内に入れる必要があります。

^x (必要 EXTENDED_GLOB パターン以外のものと一致します。 x。 この
` よりも優先順位が高くなります/'だから'^フー/バー' は ' 内のディレクトリを検索します.'
`を除く./フー' という名前のファイルの場合バー'.

x~y (必要 EXTENDED_GLOB ) パターンに一致するものに一致します x 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。
一致していません y。 これは、` を除くどの演算子よりも優先順位が低くなります。|'、 それで
`*/*~foo/bar' は、` のすべてのディレクトリ内のすべてのファイルを検索します。.' そして除外します
`foo / barこんな試合があったら。 複数のパターンを除外するには、
`foo~バー~バズ'。 除外パターンでは (y)、`/'と `.' は特別扱いされません
彼らがいつもグロビングしている方法。

x# (必要 EXTENDED_GLOB ) XNUMX 個以上の出現に一致します。
パターン x。 この演算子は高い優先順位を持っています。 `12#'は `と同等です1(2#)',
「」ではなく(12)#'。 引用符で囲まれていない ` はエラーです#' 何かに従うこと
繰り返すことはできません。 これには空の文字列、すでに後に続くパターンが含まれます。
`##'、または括弧の一部である場合は KSH_GLOB パターン (例: `!(foo)#」は
無効なので ` に置き換える必要があります*(!(foo))')。

x## (必要 EXTENDED_GLOB ) パターンの XNUMX つ以上の出現に一致します。
x。 この演算子は高い優先順位を持っています。 `12 ##'は `と同等です1(2##)'、 それよりも
`よりも(12)##'。 アクティブな ` は XNUMX つまでです#』の文字が一緒に登場する場合があります。 (ノート
` 形式の glob 修飾子との潜在的な衝突1(2##)' どれにするべきですか
したがって避けてください。)

kshのような グロブ オペレーター
Status KSH_GLOB オプションが設定されている場合、括弧の効果は先行するコマンドによって変更できます。
`@'、 `*'、 `+'、 `?'または `!'。 特別な効果を得るためにこの文字を引用符で囲まない必要はありません。
しかし、`(' でなければなりません。

@(...) 括弧内のパターンと一致します。 (「」のように(...)'。)

*(...) 任意の数の出現に一致します。 (「」のように(...)#'、再帰的なディレクトリを除く
検索はサポートされていません。)

+(...) 少なくとも XNUMX つの出現に一致します。 (「」のように(...)##'、再帰的なディレクトリを除く
検索はサポートされていません。)

?(...) XNUMX 個または XNUMX 個の出現に一致します。 (「」のように(|...)'。)

!(...) 括弧内の式以外のすべてに一致します。 (「」のように(^(...))'。)

優先順位
上記の演算子の優先順位は (最高) です。^'、 `/'、 `~'、 `|' (最低); の
残りの演算子は単に文字列の一部として左から右に処理され、` が付きます。#'
と `##' 可能な限り短い先行単位 (つまり、文字 `) に適用されます。?'、 `[...]',
`<...>'、または括弧で囲まれた式)。 上で述べたように、`/' ディレクトリとして使用される
区切り文字は括弧内に含めることはできませんが、`|' そうしなければなりません。 で使用されているパターンで
ファイル名生成以外のコンテキスト (たとえば、 場合 ステートメントとテスト内のテスト
`[[...]]')、'/「」は特別なことではありません。 そして「」/` の後の ' も特別ではありません~』が登場
ファイル名パターンの括弧の外側。

グロビング フラグ
テキストの最後までの右側のテキストに影響を与えるさまざまなフラグがあります。
囲むグループまたはパターンの最後まで。 彼らが必要とするのは、 EXTENDED_GLOB オプション。 全て
フォームを取る (#X) コラボレー X 次のいずれかの形式になります。

i 大文字と小文字を区別しない: パターン内の大文字または小文字は大文字または小文字と一致します。
小文字。

l パターン内の小文字は大文字または小文字と一致します。 アッパー
パターン内の大文字と小文字は依然として大文字のみと一致します。

I 大文字と小文字を区別します: ローカルでの効果を無効にします。 i or l その時点から。

b パターン内の括弧で囲まれたグループの後方参照をアクティブにします。 これは動作しません
ファイル名の生成で。 アクティブな括弧のセットを持つパターンが
一致すると、グループに一致する文字列が配列に格納されます。 $ match
配列内の一致するかっこの先頭のインデックス $mbegin、 そしてその
配列の末尾のインデックス $メンド、各配列の最初の要素
最初の括弧で囲まれたグループに対応します。 これらの配列は、
それ以外の場合はシェルに特別なものです。 インデックスは、と同じ規則を使用します。
パラメータ置換により、 $メンド   $mbegin で使用される場合があります
添え字; の KSH_ARRAYS オプションが尊重されます。 グロビング フラグのセットは、
括弧内のグループとみなされます。 最初の XNUMX 個のアクティブな括弧のみを使用できます。
参照。

たとえば、

foo="a string   a メッセージ"
if [[ $ foo = (a|an)' '(#b)(*)' '* ]]; その後
印刷 ${foo[$mbegin[1],$mend[1]]}
fi

`を印刷しますstring   a'。 最初の括弧が前にあることに注意してください。 (#b)  
後方参照は作成されません。

後方参照は、ファイル名以外のすべての形式のパターン マッチングで機能します。
ただし、配列全体に対して照合を実行する場合には注意してください。
${配列#パターン}、または次のようなグローバル置換 ${パラメータ//パット/繰り返し}、 のみ
最後の試合のデータは引き続き利用可能です。 グローバル置換の場合、これは
まだ役に立つかもしれません。 の例を参照してください。 m 下の旗。

後方参照の番号付けは、開始順序に厳密に従います。
パターン文字列内の括弧は左から右に配置されますが、括弧のセットは
入れ子になっている可能性があります。 ` に続く括弧には特別な規則があります。#'または `##'.
括弧の最後の一致のみが記憶されます。たとえば、` では[[ アバブ =
(#b)([ab])# ]]'、最後の ` のみb' が保存されています 一致[1]。 したがって、余分な括弧
完全なセグメントと一致させるために必要な場合があります。たとえば、` を使用します。X((ab|cd)#)Y'から
いずれかの ` の文字列全体に一致しますab'または `cd' の間X'と `Y'、の値を使用して
$match[1] ではなく $match[2].

一致が失敗した場合、パラメータは何も変更されないため、場合によっては、
事前に初期化する必要があります。 一部の後方参照が失敗した場合
一致 -- 一致しない代替ブランチにある場合に発生します。または
それらの後に続く場合 # XNUMX 回一致した場合 -- 一致した文字列が設定されます
を空の文字列に設定し、開始インデックスと終了インデックスを -1 に設定します。

後方参照を使用したパターン マッチングは、使用しない場合よりもわずかに遅くなります。

B 後方参照を非アクティブにして、 b その時点からフラグを立てます。

cN,M(#cN,M) どこでも使用できます # or ## 演算子は以下を除いて使用できます。
式の中で `(*/)#'と `(*/)##' ファイル名生成では、 '/' もっている
特別な意味。 他のグロビング フラグや不正なパターンと組み合わせることはできません
置き間違えるとエラーが発生します。 それは次の形式と同等です {N,M} 定期的に
表現。 前の文字またはグループは次の間で一致する必要があります。 N   M
回も含みます。 フォーム (#cN) 正確に必要です N マッチ; (#c,M) 同等です
指定する N 0として; (#cN,) 数に上限がないことを指定します
マッチの。

m 一致した文字列全体の一致データへの参照を設定します。 これは似ています
逆参照のため、ファイル名の生成では機能しません。 フラグが入っている必要があります
効果はパターンの最後にあります。つまり、グループに対してローカルではありません。 パラメータ $ MATCH,
$MBEGIN   $MEND 一致した文字列とそのインデックスに設定されます。
それぞれ文字列の先頭と末尾。 これはパラメータで最も役立ちます
置換、そうでない場合、一致する文字列は明らかです。

たとえば、

arr=(ベルト ジンクス 不機嫌そう ワットフ ZHO バック)
印刷 ${arr//(#m)[aeiou]/${(U)MATCH}}

すべての一致 (つまり、すべての母音) を強制的に大文字にして、` を出力します。ヴェルド ジンクス
グリムス ワクフ zhO バック'.

後方参照とは異なり、一致参照の使用による速度の低下はありません。
次のような場合に置換文字列に必要な追加の置換よりも、
示されている例。

M 非アクティブ化 m フラグがあるため、データに一致する参照は作成されません。

aNUM おおよその一致: NUM パターンと一致する文字列ではエラーが許容されます。
このルールについては、次のサブセクションで説明します。

s, e 他のフラグとは異なり、これらはローカルな効果のみを持ち、それぞれがそのフラグに表示される必要があります。
自分自身: `(#s)'と `(#e)' のみが有効な形式です。 `(#s)' フラグは次の場合にのみ成功します。
テスト文字列の先頭と `(#e)' フラグは、終了時にのみ成功します。
テスト文字列; それらは ` に対応します^'と `$' 標準の正規表現では。 彼ら
ファイル名以外のパターンのパス セグメントを照合する場合に便利です
世代(パスセグメントはいずれの場合も別個に扱われます)。 例えば、
`*((#s)|/)テスト((#e)|/)*' はパスセグメントに一致します 'test' 次のいずれかで
文字列: test, テスト/開始時/開始時, 時/終わり/テスト, で/テスト/中間.

もう XNUMX つの用途は、パラメータの置換です。 たとえば、`${配列/(#s)A*Z(#e)}' 意思
完全なパターンに一致する配列の要素のみを削除します `A*Z'。 がある
このタイプの多くの操作を実行するには他の方法もありますが、
置換操作 `/'と `//' と '(#s)'と `(#e)' フラグが提供する
シンプルで覚えやすいたった XNUMX つの方法。

` という形式のアサーションがあることに注意してください。(^(#s))' も機能します。つまり、次の場所を除くどこにでも一致します。
文字列の先頭ですが、これは実際には「文字列以外のすべて」を意味します。
文字列の先頭の長さがゼロの部分'; `を使用する必要があります(""~(#s))'から
文字列の先頭以外の長さゼロの部分と一致します。

q `q' およびグロビング フラグの右括弧までのすべてが次のようになります。
パターンマッチングコードでは無視されます。 これは、glob の使用をサポートすることを目的としています。
予選については、以下を参照してください。 結果は、パターン `(#b)(*).c(#q.)' に使える
グロビングと文字列とのマッチングの両方に使用されます。 前者の場合、
`(#q.)' はグロブ修飾子として扱われ、`(#b)「役に立たないでしょう、
一方、後者の場合、`(#b)' は後方参照に便利で、`(#q.)'
無視されます。 glob 修飾子のコロン修飾子も同様ではないことに注意してください。
通常のパターンマッチングに適用されます。

u マルチバイト文字がファイル内に存在するかどうかを判断する際には、現在のロケールを尊重します。
パターン (シェルがコンパイルされた場合) マルチバイトサポート。 これはオーバーライドします
  マルチバイト オプション; デフォルトの動作はオプションから取得されます。 比較 U.
(ニーモニック: 通常、マルチバイト文字は UTF-8 エンコーディングの Unicode からのものです。
ただし、システム ライブラリでサポートされている ASCII の拡張子はどれでも使用できます。)

U すべての文字は XNUMX バイト長とみなされます。 の反対 u。 この
をオーバーライドします マルチバイト オプションを選択します。

たとえば、テスト文字列 ふーっ パターンによって一致させることができます (#i)FOOOXX、しかし、によってではありません
(#l)フークス, (#i)FOO(#I)XX or ((#i)FOOX)X。 文字列 (#ia2) リードミー 指定する
大文字と小文字を区別しない一致 README 最大 XNUMX つのエラーがあります。

ksh 構文を使用して両方をグループ化する場合 KSH_GLOB   EXTENDED_GLOB を設定する必要があり、
左括弧の前に次の文字を付ける必要があります @。 フラグは文字に影響を与えないことにも注意してください
内部 [...] グループ、言い換えれば (#i)[az] それでも小文字のみに一致します。
最後に、大文字と小文字を区別せずにパス全体を検査する場合、すべてのディレクトリは次のとおりである必要があることに注意してください。
一致するすべてのファイルを検索するため、次の形式のパターンが得られます。 (#i)/foo/bar/... is
潜在的に遅い。

近似 マッチング
おおよそ一致する場合、シェルは見つかったエラーの数を保持しますが、
で指定された数を超えます (#aNUM) フラグ。 次の XNUMX 種類のエラーが認識されます。

1. 次のように、さまざまな文字 フォックスバー   フーイバー.

2. 次のように文字を入れ替えます。 banana   アブナナ.

3. パターンと同様に、ターゲット文字列に文字が欠落している ロード とターゲット
string ロッド.

4. ターゲット文字列に余分な文字が現れる。 ストーブ   ストローブ.

したがって、パターンは (#a3)abcd マッチ DCBA、最初のを使用するとエラーが発生します
ルールを XNUMX 回、XNUMX 番目を XNUMX 回とし、文字列を次のようにグループ化します。 [d][cb][a]   [あいうえお].

パターンの非リテラル部分は、文字内の文字も含めて正確に一致する必要があります
範囲: したがって (#a1)??? ルール 4 を空の文字列に適用することにより、長さ XNUMX の文字列と一致します。
パターンの一部ですが、長さ XNUMX の文字列ではありません。 ? 一致している必要があります。 他の
正確に一致する必要がある文字は、ファイル名の最初のドットです (ただし、 GLOB_DOTS
オプションが設定されている)、ファイル名のすべてのスラッシュ ABC は XNUMX つのエラーです AB/C
スラッシュを別の文字に置き換えることはできません)。 同様にエラーもカウントされます
パターン内の連続しない文字列を個別に処理するため、 (ab|cd)ef は XNUMX つのエラーです
aebf.

による除外を使用する場合、 ~ 演算子、近似一致は完全に処理されます
除外部分については個別に実行する必要があり、個別にアクティブ化する必要があります。 したがって、
(#a1)README~READ_ME マッチ お読みください はなく、 お読みください、末尾として お読みください 一致しています
近似なしで。 しかし、 (#a1)README~(#a1)READ_ME どのパターンにも一致しません
フォーム お客様の声は?ME そのような形式はすべて除外されているためです。

除外を除けば、全体的なエラー数は XNUMX つだけです。 ただし、最大誤差は
allowed はローカルで変更でき、これはグループ化によって区切ることができます。 例えば、
(#a1)猫((#a0)犬)キツネ 合計で XNUMX つのエラーが許容されますが、 セクション、
そしてそのパターン (#a1)猫(#a0)犬(#a1)キツネ 同等です。 のポイントに注意してください。
最初に見つかった誤差は、近似を使用するかどうかを決定するための重要な誤差です。 ために
例、 (#a1)abc(#a0)xyz 一致しません abcdxyz, `の部分でエラーが発生するためです。x',
近似がオフになっている場合。

パスセグメント全体がほぼ一致する可能性があるため、
`(#a1)/foo/d/is/利用可能/at/the/bar' は、どのパス セグメントでも XNUMX つのエラーを許容します。 これはたくさんです
ない場合よりも効率が低下します (#a1)ただし、パス内のすべてのディレクトリは次のとおりである必要があるため、
おおよそ一致する可能性があるものをスキャンします。 を置くのがベストです (#a1) どんな道の後にも
正しいことがわかっているセグメント。

再帰的 グロビング
` 形式のパス名コンポーネント(foo/)#' は XNUMX 個以上のパスに一致します
パターンに一致するディレクトリ foo.

略記すると、`** /'は `と同等です(*/)#'; したがって、これは次のファイルに一致することに注意してください。
現在のディレクトリとサブディレクトリ。 したがって:

ls (*/)#バー

or

ls **/バー

` という名前のファイルを再帰的にディレクトリ検索します。バー' (ファイルが含まれる可能性があります)
`バー' 現在のディレクトリにあります)。 このフォームはシンボリック リンクをたどりません。 の
代替形式 `*** /' は同じですが、それ以外は同じです。 これらはどちらもありえません
同じパスセグメント内で他の形式のグロビングと組み合わせる。 その場合、`*'
演算子は通常の効果に戻ります。

グロブ 予選
ファイル名の生成に使用されるパターンは、で囲まれた修飾子のリストで終わる場合があります。
括弧。 修飾子は、指定されたファイル名に一致するファイル名を指定します。
パターンは引数リストに挿入されます。

オプションの場合 BARE_GLOB_QUAL が設定されている場合、` を含まない括弧の末尾のセット|'
または `(' 文字 (または `~' 特別な場合) は glob 修飾子のセットとして解釈されます。 塊
通常は glob 修飾子として解釈される部分式 (例: `)(^x)'、できる
この場合、かっこを XNUMX つ重ねることで、グロブ パターンの一部として扱われるように強制されます。
`を生成する((^x))'.

オプションの場合 EXTENDED_GLOB が設定されている場合、glob 修飾子の別の構文が使用可能です。
つまり「」(#qx)' どこ x 他の形式で使用されるのと同じ glob 修飾子のいずれかです。 の
修飾子はパターンの最後に出現する必要があります。 ただし、この構文では
複数の glob 修飾子を連鎖させることもできます。 これらは、次の論理積として扱われます。
フラグの個々のセット。 また、構文は明確であるため、式は次のようになります。
括弧内に含まれる括弧のバランスが取れている限り、glob 修飾子として扱われます。
`の出現|'、 `('または `~」は効果を無効にするものではありません。 予選は次のとおりになることに注意してください。
パターンの最後にベア glob 修飾子が存在する場合でも、この形式で認識されます。
たとえば、*(#q*)(.)' 両方のオプションが設定されている場合、実行可能な通常のファイルが認識されます。
ただし、わかりやすくするために、混合構文はおそらく避けるべきです。 ご了承ください
` を使用した条件内で[[' 括弧で囲まれた式の存在を形成します (#q...)
文字列の末尾にある は、グロビングを実行する必要があることを示します。 表現かもしれない
glob 修飾子を含めますが、単純に指定する場合も有効です。 (#q)。 これは当てはまりません
構文にはすでに特別な機能があるため、パターン一致演算子の右側に
意義。

修飾子は次のいずれかになります。

/ ディレクトリ

F 「完全な」(つまり空ではない) ディレクトリ。 逆の意味なので注意してください (^ふ) に拡大します
空のディレクトリとディレクトリ以外のすべて。 使用 (/^フ) 空のディレクトリの場合。

. プレーンファイル

@ シンボリックリンク

= ソケット

p 名前付きパイプ (FIFO)

* 実行可能なプレーン ファイル (0100 または 0010 または 0001)

% デバイスファイル (キャラクタまたはブロックスペシャル)

%b 特殊なファイルをブロックする

%c キャラクタースペシャルファイル

r 所有者が読み取り可能なファイル (0400)

w 所有者が書き込み可能なファイル (0200)

x 所有者実行可能ファイル (0100)

A グループ読み取り可能なファイル (0040)

I グループ書き込み可能なファイル (0020)

E グループ実行可能ファイル (0010)

R 世界中で読み取り可能なファイル (0004)

W 誰でも書き込み可能なファイル (0002)

X ワールド実行可能ファイル (0001)

s setuid ファイル (04000)

S setgid ファイル (02000)

t スティッキー ビット (01000) を持つファイル

fスペック アクセス権が一致するファイル スペック。 この スペック オプションで XNUMX 進数にすることもできます
` が前に付く='、'+'、または `-'。 これらの文字がどれも指定されていない場合、
動作は ` の場合と同じです='。 XNUMX 進数は、対象となるモード ビットを表します。
` と組み合わせると期待される='、指定された値はファイルモードと一致する必要があります
正確には、` を付けて+'、少なくとも指定された数値のビットを
ファイルモード、および ` 付き-' の場合、数値内のビットを設定してはなりません。 `を与える?'
数値内の任意の場所に XNUMX 進数の代わりに、対応するビットが確実に存在するようにします。
ファイルモードではチェックされません。これは ` と組み合わせた場合にのみ役立ちます。='.

修飾子 ` の場合f' の後には、その次の文字までの任意の文字が続きます。
一致する文字 (`['、 `{'、および `<' 一致 ']'、 `}'、および `>' それぞれ、任意の
他の文字はそれ自体に一致します) は、カンマ区切りのリストとして扱われます。 サブスペックs.
サブスペック 前述の XNUMX 進数、または次のいずれかのリストのいずれかになります。
文字「u'、 `g'、 `o'、および `a'、その後に `='、'+'、または `-」と続きました
任意の文字 ` のリストによるr'、 `w'、 `x'、 `s'、および `t'、または XNUMX 進数。
最初の文字リストは、どのアクセス権をチェックするかを指定します。 もし
`u' が指定されている場合は、ファイルの所有者のものが使用されます。g' が与えられるものは、
グループがチェックされると、`o' は他のユーザーのテストを意味し、`aと言う
XNUMX つのグループすべてをテストします。 `='、 `+'、および `-' モードがどうあるべきかを再度示します
チェックされており、上記の最初の形式で説明したのと同じ意味を持ちます。 二番目
文字のリストは最終的にどのアクセス権が期待されるかを示します: `r' にとって
読み取りアクセス、`w' 書き込みアクセスの場合、'x' ファイルを実行する権利 (または
ディレクトリを検索)、`ssetuid ビットと setgid ビットの場合は '、および `t'粘着性のあるもののために
ビット。

したがって、「*(f70?)' 所有者が読み取り、書き込み、実行したファイルを与えます
許可されており、グループの他のメンバーには権限がありません。
他のユーザーの権限。 パターン「*(f-100)' は、
所有者には実行権限がなく、`*(f:gu+w,o-rx:)' のファイルを提供します
所有者とグループの他のメンバーが少なくとも書き込み権限を持っている、
他のユーザーには読み取り権限も実行権限もありません。

estring
+CMD 当学校区の string シェルコードとして実行されます。 ファイル名は
コードがゼロのステータス (通常は最後のステータスのステータス) を返した場合に限り、リストを表示します。
コマンド)。

最初の形式では、` の後の最初の文字e' が区切り文字として使用されます
次に一致する区切り文字までのすべてが string; `[',
`{'、および `<' 一致 ']'、 `}'、および `>'、それぞれ他の文字
それ自体と一致します。 展開は引用符で囲む必要があることに注意してください。 string それらを防ぐために
グロビングが行われる前に展開されないようにします。 string その後、シェルとして実行されます
コード。 文字列 グロブクアル 配列に追加される zsh_eval_context デュレーション
実行の。

の実行中、 string 現在テスト中のファイル名は次の場所で入手できます。
パラメータ 応答; パラメータは、挿入される文字列に変更できます。
元のファイル名の代わりにリストを使用します。 また、パラメータは 返信 多分
配列または文字列に設定すると、次の値がオーバーライドされます。 応答。 に設定した場合
配列の場合、後者はコマンド ラインにワードごとに挿入されます。

たとえば、ディレクトリに XNUMX つのファイルが含まれているとします。孤独な'。 そうして
式 `*(e:'返信=(${REPLY}{1,2})':)' という言葉が発生しますlonely1'と
`lonely2' をコマンドラインに挿入します。 の引用に注意してください string.

フォーム +CMD 同じ効果がありますが、前後に区切り文字は表示されません CMD。 代わりに、
CMD は、次の最長の文字シーケンスとみなされます。 + そのアール
英数字またはアンダースコア。 通常 CMD シェル関数の名前になります
適切なテストが含まれています。 例えば、

nt() { [[ $ REPLY -nt $NTREF ]] }
NTREF=reffile
ls -l *(+nt)

より最近に変更されたディレクトリ内のすべてのファイルをリストします。
reffile.

ddevの デバイス上のファイル devの

l[-|+]ct
リンク数が未満のファイル ct (-)、より大きい ct (+)、または以下に等しい ct

U 実効ユーザー ID が所有するファイル

G 実効グループ ID が所有するファイル

uid ユーザーIDが所有するファイル id それが数字の場合。 さもないと、 id ユーザーを指定します
名前: ` の後の文字u' は区切り文字として扱われ、文字列が
それと次に一致する区切り文字の間にある文字がユーザー名として解釈されます。 の
開始区切り文字 `['、 `{'、および `<' 最後の区切り文字と一致します `]'、 `}'、および `>',
それぞれ; 他の文字はそれ自体と一致します。 選択されたファイルは次のとおりです
このユーザーが所有しています。 たとえば、「う:ふー:'または `う[フー]' ユーザーが所有するファイルを選択します
`foo'.

gid ような uid ただし、グループ ID または名前が付いている

a[ムウムス][-|+]n
ファイルに正確にアクセス n 数日前。 過去にアクセスされたファイル n 日々は
負の値を使用して選択 n (-n)。 より多くアクセスされたファイル n 数日前
ポジティブに選ばれる n 値(+n)。 オプションの単位指定子 `M'、 `w'、 `h',
`m'または `s' (例: 'ah5') チェックが月単位 (30 日) で実行されるようにします。
日ではなく、それぞれ週、時間、分、または秒です。 明示的な `d'
数日間も許可されます。

アクセス時間と現在の部分の差の小数部分
適切な単位の値は比較では無視されます。 たとえば、「echo
*(ああ-5)' は、過去 XNUMX 時間以内にアクセスされたファイルをエコーし​​ます。一方、 'echo *(ああ+5)'
少なくとも XNUMX 時間前にアクセスされたファイルを、厳密に XNUMX 時間の間の時間としてエコーします。
XNUMX 時間は XNUMX 時間として扱われます。

m[ムウムス][-|+]n
ファイルアクセス修飾子と同様ですが、ファイルの変更時刻を使用する点が異なります。

c[ムウムス][-|+]n
ファイルアクセス修飾子と同様ですが、ファイルの i ノード変更時刻を使用する点が異なります。

L[+|-]n
未満のファイル n バイト (-)、 より多い n バイト (+)、または正確に n バイト長。

このフラグの直後に サイズ 指定子 `k'('K')、'm'('M')、または `p'
(`P') (例: 'Lk-50') チェックはキロバイト、メガバイト、またはブロックで実行されます
(512 バイト) 代わりに。 (一部のシステムでは、追加の指定子が利用可能です)
ギガバイト、`g'または `G'、テラバイト、't'または `T'.) サイズ指定子が使用されている場合、
ファイルサイズを次の単位に切り上げた場合、ファイルは「正確な」サイズとみなされます。
はテストサイズと同じです。 したがって、`*(Lm1)' は 1 バイトから 1 バイトまでのファイルに一致します
メガバイトも含みます。 ファイルのセットはテスト サイズより「小さい」だけであることにも注意してください。
等価性テストに一致しないファイルが含まれます。 したがって、`*(Lm-1)' のみ一致
サイズがゼロのファイル。

^ それに続くすべての修飾子を無効にします

- 修飾子をシンボリック リンク上で機能させる (デフォルト) か、
彼らが指すファイル

M を設定します MARK_DIRS 現在のパターンのオプション

T ファイル名の末尾に修飾子マークを追加します。 リストタイプ
現在のパターンのオプション (オーバーライド M)

N を設定します NULL_GLOB 現在のパターンのオプション

D を設定します GLOB_DOTS 現在のパターンのオプション

n を設定します NUMERIC_GLOB_SORT 現在のパターンのオプション

Yn 短絡モードを有効にします。パターンは最大で拡張されます。 n ファイル名。 もし
より多い n 一致は存在しますが、最初のもののみです n ディレクトリの走査順序で一致します
考えます。

示す oN いいえの場合 oc 修飾子が使用されます。

oc ファイル名の並べ替え方法を指定します。 もし c is n それらは次の基準で並べ替えられています
名前; もしそれが L ファイルのサイズ (長さ) に応じて並べ替えられます。 もし l
リンクの数によって並べ替えられます。 もし a, mまたは c 時間順に並べ替えられています
それぞれ、最後のアクセス、変更、または i ノードの変更。 もし d、ファイル
サブディレクトリは、各レベルで現在のディレクトリ内のサブディレクトリより前に表示されます。
検索 -- これは他の条件と組み合わせるのが最適です。たとえば、`オドン' 並べ替える
同じディレクトリ内のファイルの名前。 もし N、並べ替えは実​​行されません。 注記
それ a, m, c 年齢を現在時刻と比較するため、名前は次のようになります。
リストは最も新しいファイルです。 修飾子にも注意してください。 ^   - 使用されているので、
`*(^-oL)' ファイル サイズの降順に並べ替えられたすべてのファイルのリストが表示されます。
シンボリック リンクをたどります。 ない限り oN 複数の順序指定子が使用される場合、
絆を解消するために起こります。

デフォルトの並べ替えは、 n (名前で) Y glob 修飾子が使用されます。
それはそうだ N (未整理)。

oe   o+ は特殊な場合です。 それぞれの後にシェルコードが続き、次のように区切られます。
  e glob修飾子と + それぞれ glob 修飾子 (上記を参照)。 コード
パラメータが指定された一致したファイルごとに実行されます 応答 の名前に設定されます
入場時のファイルと グロブソート に追加 zsh_eval_context。 コードを変更する必要があります
パラメータ 応答 ある意味で。 戻り時にパラメータの値が使用されます
ファイル名の代わりに、ソートする文字列として使用します。 他の種類とは異なります
演算子、 oe   o+ 繰り返すこともできますが、ソートの最大数に注意してください。
グロブ式に現れる可能性のあるあらゆる種類の演算子は 12 です。

Oc `のようにo' ただし、降順でソートされます。 つまり「」*(^o^)'は`と同じです*(XNUMX月)'と
`*(^Oc)'は`と同じです*(oc)'; `Od' ファイルを現在のディレクトリに置く前に
検索の各レベルのサブディレクトリにあるもの。

[懇願する[,end]]
一致したファイル名のうち、返されるリストに含めるファイル名を指定します。
構文は配列の添字の場合と同じです。 懇願する およびオプション end 多分
数学的な表現。 パラメーターの添え字と同様に、負の値になる場合があります。
最後の一致から逆方向にカウントされます。 例: `*(-OL[1,3])' のリストを与えます
最大の XNUMX つのファイルの名前。

Pstring
当学校区の string は、各グロブ一致の先頭に別の単語として追加されます。 string is
への引数と同じ方法で区切られます。 e 前述の glob 修飾子。
修飾子は繰り返すことができます。 単語は個別に先頭に追加されるため、
結果のコマンドラインには、コマンドで指定されたのと同じ順序で単語が含まれます。
グロブ修飾子のリスト。

これの一般的な使用法は、ファイルが出現するすべての前にオプションを追加することです。
名前; たとえば、パターン `*(P:-f:)' コマンドライン引数を生成します `-f
file1 -f file2 ... '

修飾子の場合 ^ アクティブである場合、 string 前に追加されるのではなく追加されます。
先頭と末尾は独立して行われるため、両方を同じ glob で使用できます。
表現; たとえば ` と書くことで*(P:foo:^P:bar:^P:baz:)' を生成します。
コマンドライン引数 `foo バズ file1 バー ... '

これらのリストはカンマで区切って複数組み合わせることができます。 リスト全体が一致します
サブリストの少なくとも XNUMX つが一致する場合 (サブリスト内の修飾子は「OR」で計算されます)
'and'されます)。 ただし、一部の修飾子は、
それらが与えられるサブリスト。 これらは修飾子です `M'、 `T'、 `N'、 `D'、 `n'、 `o',
`O' および括弧内に指定された添字 (`[...]')。

`の場合:' が修飾子リストに表示される場合、括弧内の式の残りの部分は次のようになります。
修飾子として解釈されます (「歴史」セクションの「修飾子」セクションを参照してください)
拡大')。 各修飾子は個別の ` で導入する必要があります:'。 また、
変更後の結果は既存のファイルである必要はありません。 既存の名前
file の後には ` という形式の修飾子を続けることができます(:...)' 実際のファイル名がなくても
生成は実行されますが、括弧の存在により、
式全体が、次のようなグローバル パターン マッチング オプションの対象となります。
NULL_GLOB。 したがって:

ls *(-/)

すべてのディレクトリとディレクトリを指すシンボリック リンクをリストします。

ls *(-@)

壊れたシンボリック リンクをすべてリストし、

ls *(%W)

現在のディレクトリ内の誰でも書き込み可能なデバイス ファイルをすべてリストします。

ls *(W,X)

現在のディレクトリ内の誰でも書き込み可能または誰でも実行可能なファイルをすべてリストします。

echo /tmp/foo*(u0^@:t)

文字列 ` で始まるすべてのルート所有ファイルのベース名を出力します。foo/ tmpに,
シンボリックリンクを無視し、

ls *.*~(lex|parse).[ch](^D^l1)

リンク数が XNUMX で、名前にドットが含まれるファイルをすべてリストします (ただし、それらのファイルはリストされません)。
ドットから始まるので、 GLOB_DOTS 明示的にオフに切り替えられます)を除き、 lex.c, lex.h,
parse.c   parse.h.

印刷 b*.pro(#q:s/pro/shmo/)(#q.:s/builtin/shmiltin/)

は、コロン修飾子と他の修飾子がどのように連鎖するかを示しています。 の
通常の修飾子 `.' が最初に適用され、次にコロン修飾子が左から順に適用されます。
右。 それで、もし EXTENDED_GLOB が設定されており、基本パターンが通常のファイルと一致します
ビルトイン.プロ、シェルは ` を出力しますシュミルティン・シュモ'.

onworks.net サービスを使用してオンラインで zshexpn を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad




×
Advertisement
❤️ここでショッピング、予約、購入してください。料金はかかりません。これにより、サービスが無料で維持されます。