Bash 当使用“.file args…”调用时,文件中的Shell函数未运行

Bash 当使用“.file args…”调用时,文件中的Shell函数未运行,bash,function,shell,scripting,Bash,Function,Shell,Scripting,我正在学习bash的东西,我想我对函数感到困惑。当我编写一个函数来重复一个字符所需的次数时,如下所示: _repeat() { #@ USAGE: _repeate string number _REPEAT=$1 while [ ${#_REPEAT} -lt $2 ] do _REPEAT=$_REPEAT$_REPEAT$_REPEAT done _REPEAT=${_REPEAT:0:$2} ## Trim to desi

我正在学习bash的东西,我想我对函数感到困惑。当我编写一个函数来重复一个字符所需的次数时,如下所示:

_repeat()
{
    #@ USAGE: _repeate string number
    _REPEAT=$1
    while [ ${#_REPEAT} -lt $2 ]
    do
        _REPEAT=$_REPEAT$_REPEAT$_REPEAT
    done

    _REPEAT=${_REPEAT:0:$2} ## Trim to desired length

    printf "%s\n" "$_REPEAT"
}
我用命令行调用它_对终端重复hi 5无打印。如果我去掉函数名和括号,只保留代码,然后执行chmod+x/pathtofile/\u repeat并调用repeat hi 5,它会打印到命令行

我想我对函数有些误解,但我不确定是什么

发生什么事了 运行时:

. _repeat hi 5
…它正在运行文件中的内容\u在当前shell中重复,其中$1表示hi,$2表示5

然而,问题中给出的内容仅仅定义了一个函数;它们不调用该函数,因此函数体永远不会生效

修改脚本以调用函数 只需在末尾添加以下行:

if (( $# )); then _repeat "$@"; fi
如果向脚本传递了一个非零参数列表,这将调用函数_repeat。如果没有传递任何参数,那么脚本将只定义函数而不执行它

在不使用脚本的情况下调用函数 在定义函数后的任何时候,您都可以将其作为命令调用来执行,而不需要点:

_repeat hi 5

. _repeat hi 5正在读取名为_repeat的文件,在执行文件内容时,参数hi和5在$@中定义。如果要调用当前shell中已定义的函数,只需运行_repeathi 5,不带前导点。为什么要包含该点。?在没有它的情况下运行它也许你在一个文件中有那个函数定义?在当前shell中定义函数时,它不会运行函数,除非您修改文件的内容以显式地使用f/e,并添加最后一行,如if$;然后重复$@;fi.BTW,如果您不声明函数局部变量local或使用declare(作为同义词),则它们会泄漏到周围的范围。@a.Pizzle以在bash:typeset-f中查看声明的函数。要查看可以使用的变量:set-oposix;设置