web-dev-qa-db-ja.com

_expandは何をしますか?

私はシェルで働いていましたが、間違ってオートコンプリートしました tab _eを書き込んだ後、_expandになりました。

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

しかし、彼らは私の質問に答えません。代わりに、_complete_complete_as_rootなどのコマンドに関する同じ種類の質問がさらに開かれます。

12
scristalli

入力すると、_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補完メカニズムの機能です。パス名のチルダ(~)を展開します。 /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
14
chaos