zshの辞書コマンド修飾子について

zshの辞書コマンド修飾子について

背景

しかし、zsh ドキュメント(6.2章)では、次のように説明します。辞書コマンド修飾子-実行できますが、すべてのタイプ(、、、、builtinおよびcommandexecの例を提供するわけではありません。nocorrectnoglob

一つあるエマルジョンユーザーの問い合わせファンクアン。ただし、この質問は、すべての種類の辞書コマンド修飾子に対する要求の例を強調するわけではありません。


質問

各辞書コマンド修飾子が実行できる操作の例を提供できる人はいますか?

乾杯!

ベストアンサー1

以下に、各修飾子の例を示します。などの一部は、ここに示されている用途に加えて、execさまざまな用途に使用されます。command


  • 実行に使用されるユーティリティは、-0番目の引数(コマンド名)の最初の文字としてダッシュを挿入します。コマンド名の最初の文字であるダッシュは、ログインシェルで初期化する必要があることをシェルに通知する一般的な方法です。

    # Start the yash shell as a login shell:
    - yash
    

    これにより、シェルが別の起動スクリプトセットを読み始めることができます。たとえば、ファイルを最初にyash読み込み~/.yash_profile、そうでなければ読みません。

    -シェルがの最初の文字で始まると、$0ログインシェルになります。ログインシェルには通常l(小文字のell)もあります$-bashシェルはこの規則に従わないようです)。

    $ sh -c 'echo "$0"; echo "$-"'
    sh
    ch
    
    $ - sh -c 'echo "$0"; echo "$-"'
    -sh
    clh
    
  • 使用builtin:

    builtin cd mydir
    

    cdたとえば、機能の一部として作業ディレクトリを実際に変更するために呼び出される組み込みバリアントであるシェル関数を作成したい場合にcd便利です。ただ使用すると、cd関数への再帰呼び出しが発生します。

    $ cd () { builtin cd "$@" && printf 'Now in %s\n' $PWD; }
    $ cd /tmp
    Now in /tmp
    
  • コマンドcommand標準 POSIX コマンドたとえば、ユーザーの現在のシステムに特定のユーティリティが存在することを確認するために使用できますPATH

    if ! command -v gsed >/dev/null 2>&1; then
        echo 'gsed is not available'
    fi
    

    このcommandコマンドは、上記と同様の方法で特定のユーティリティのエイリアスと関数の検索を無効にするためにも一般的に使用されますbuiltin

  • キーワードexecまた、標準、完全に使用できます変える現在のシェルと他のプロセス:

    # Replace the shell with bash
    exec bash
    

    その後、入力はシェルセッションに置き換えられexitたため、元のシェルセッションに戻りませんbash

    また、これを使用して、exec現在のシェルの標準 I/O ストリームのリダイレクトを設定することもできます。

  • 現在の対話式シェルセッションに対してスペル校正(setopt CORRECT)が有効になっている場合は、nocorrect以下を使用します。いいえコマンド変更を有効にします。

    一般的に:

    $ setopt CORRECT
    $ seed
    zsh: correct 'seed' to 'sed' [nyae]? n
    zsh: command not found: seed
    

    そしてnocorrect

    $ setopt CORRECT
    $ nocorrect seed
    zsh: command not found: seed
    
  • このnoglob修飾子は現在のコマンドに対してワイルドカードを無効にします。

    $ noglob echo *
    *
    

    noglob修飾子がない場合は、*パターンが展開され、結果の単語(現在のディレクトリのファイル名)が引数として提供されますecho

    他のシェルでは、ワイルドカードを使用して一時的にオフにしてから再びオンにset -fすることができますset +f。これは〜になります標準方式シェルでファイル名のグロービングを無効にします。このset -fコマンドはシェルがエミュレートzshされるか、 。shksh

おすすめ記事