_expandは何をしますか?


12

私はシェルで作業していましたが、誤ってtab書き込み後にオートコンプリートし_eました_expand

このコマンドは何をしますか?私はオンラインで説明を見つけることができませんでした。AskUbuntuでここで見つけることができた唯一の参照は以下でした:

しかし、彼らは私の質問に答えません。代わりに、彼らのようなコマンドについて同じ種類の多くの質問を開く_complete_complete_as_rootなど、

回答:


14

_expand入力すると、何が起こるかがわかります

$ type _expand
_expand is a function
_expand ()
{
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur;
    else
        if [[ "$cur" == \~* ]]; then
            cur=${cur#\~};
            COMPREPLY=($( compgen -P '~' -u "$cur" ));
            [ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]};
            return ${#COMPREPLY[@]};
        fi;
    fi
}

これは、bash補完メカニズムの機能です。~パス名のチルダ()を展開します。In /etc/bash_completionは関数に関するコメントです:

# Expand ~username type directory specifications.  We want to expand
# ~foo/... to /home/foo/... to avoid problems when $cur starting with
# a tilde is fed to commands and ending up quoted instead of expanded.

ターミナルで試してみてください:

~<tab><tab>

たとえば、ユーザー名に展開されます

~usera     ~userb     ~userc

1
おかげで、私はコマンドを知りませんでしたtype。これらの関数をとして呼び出すことができなかった理由は私には明らかではありませんでした_function_name [argument]が、今ではオートコンプリート拡張機能としての目的を果たしていることを理解し、オートコンプリートに表示されるという事実は、単に宣言されているためです(しかし、直接呼び出されます)。
scristalli

3
この_expand関数は、他のすべての完全な関数と同様に、補完パターンを含むCOMPREPLY値に基づいて配列を操作するだけ$curです。
カオス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.