使用"调用时文件中的Shell函数未运行。档案args ..."

时间:2017-10-20 16:18:32

标签: 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 desired length

    printf "%s\n" "$_REPEAT"
}

我在命令行上调用它. _repeat "hi" 5没有打印到终端。如果我拿走函数名称和括号,只需要代码,然后执行chmod +x /pathtofile/_repeat并调用repeat "hi" 5,它就会打印到命令行。

我认为我对功能有些误解,但我不确定是什么。

1 个答案:

答案 0 :(得分:1)

正在进行什么

当你跑步时:

. _repeat hi 5

...正在运行当前shell中文件_repeat的内容,$1hi$25

但是,问题中给出的内容仅仅定义了一个函数;他们没有调用该函数,因此函数体永远不会生效。

修改脚本以调用函数

只需将以下行添加到最后:

if (( $# )); then _repeat "$@"; fi

如果脚本传递给非零参数列表,这将调用函数_repeat。 (如果没有传递参数,那么获取脚本只会定义函数而不执行它。)

在没有脚本的情况下调用您的函数

在定义函数之后的任何时候,只需将其作为命令调用即可执行它,不带点:

_repeat hi 5