如何在 Bash Shell 脚本中调用函数

如何在 Bash Shell 脚本中调用函数

我只是想知道在 bash shell 脚本中调用$(one_function)和函数的区别。one_function

PS1当我在中设置变量时~/.bashrc,我无法通过one_func 以下方式调用该函数:

export PS1="\n\[\e[31m\] \$(one_func)  # it works 

export PS1="\n\[\e[31m\] one_func      # it doesn't work

答案1

与访问变量的方式相反,函数通过名称调用,而不必在名称前面加上“$”。

您可能对如何在命令行上定义函数并通过名称调用该函数感到困惑,但在 PS1 中,您必须将命令放在括号中,前面加上“\$”。将函数名称括在“$(' 和 ')' 中会导致整个“$(function)”被替换为该函数的标准输出。在其前面加上反斜杠会导致您的 shell 每次想要输出 $PS1 时评估/运行该函数。如果您省略了反斜杠,则该函数只会在您第一次定义 PS1 时被调用一次,并且该函数第一次的输出从此将永远存在于您的 PS1 提示符中。

答案2

当你调用时$(one_func),它将执行该函数并返回输出。因此,如果你说,例如:

var=$(ls)

它会将命令的输出ls(即当前目录中的文件列表)存储到变量中$var。而命令:

var=ls

只会将的值设置$var为“ls”。

顺便说一下,在 bash 中调用函数的方式与执行命令的方式相同。

答案3

只是想补充一下上面的内容,非常有用的信息...嵌套函数和调用可执行文件时也适用同样的想法...

PS1="# \e[1;30m\u\e[0;37m@\h: \e[1;31m\w\e[31m >\e[1;30m  \t \e[1;33m [ \$(kmg \$(totalfilesize.sh)) ]\e[m\n"

“kmg” 是我定义的一个 bash 函数,并使用此语法从“totalfilesize.sh”脚本的输出中传递一个参数

\$(kmg \$(totalfilesize.sh))

如果您好奇,totalfilesize 会计算当前目录中文件的大小,而 kmg 会将字符串(以字节为单位)转换为人类可读的 b、mB、gB 等。

相关内容