我正在学习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
,它就会打印到命令行。
我认为我对功能有些误解,但我不确定是什么。
答案 0 :(得分:1)
当你跑步时:
. _repeat hi 5
...正在运行当前shell中文件_repeat
的内容,$1
为hi
且$2
为5
。
但是,问题中给出的内容仅仅定义了一个函数;他们没有调用该函数,因此函数体永远不会生效。
只需将以下行添加到最后:
if (( $# )); then _repeat "$@"; fi
如果脚本传递给非零参数列表,这将调用函数_repeat
。 (如果没有传递参数,那么获取脚本只会定义函数而不执行它。)
在定义函数之后的任何时候,只需将其作为命令调用即可执行它,不带点:
_repeat hi 5