type 命令的奇怪行为

type 命令的奇怪行为

我有时会使用输入命令查看我的代码:

$ type squared
squared is a function
squared ()
{
    local t=$(($1*$1));
    echo $t
}

我可以用内置函数做同样的事情:

$ type __expand_tilde_by_ref
__expand_tilde_by_ref is a function
__expand_tilde_by_ref ()
{
    if [[ ${!1-} == \~* ]]; then
        eval $1="$(printf ~%q "${!1#\~}")";
    fi
}

但是如果我将这些命令放入此脚本中:

$ cat testit.sh
#!/bin/bash
source  ~/bin/all-my-functions.sh
type squared
type __expand_tilde_by_ref

并运行它:

$ ./testit.sh

我得到:

squared is a function
squared ()
{
    local t=$(($1*$1));
    echo $t
}
./testit.sh: line 4: type: __expand_tilde_by_ref: not found

它无法识别内置命令。为什么?

我检查了类型,它不是别名:

$ type -t type
builtin

答案1

__expand_tilde_by_ref可能在/etc/bash_completion(实际上/usr/share/bash-completion/bash_completion)中定义。看看你的~/.bashrc,只有当它是交互式 shell 时才应该包含一些行/etc/bash_completion,并且不适用于脚本文件。

相关内容