Bash shell函数是否导出到子流程?
根据ManBash的说法,如果shell函数是通过使用export或declare-x显式导出的,那么它们只会导出到子流程。此外,括号和反勾号(包括$(…))也在子流程中运行。那么,为什么这样做有效呢Bash shell函数是否导出到子流程?,bash,Bash,根据ManBash的说法,如果shell函数是通过使用export或declare-x显式导出的,那么它们只会导出到子流程。此外,括号和反勾号(包括$(…))也在子流程中运行。那么,为什么这样做有效呢 #!/bin/bash function x { echo x; } x (x) echo `x` echo $(x) bash -c x 我希望看到“x”后面有4个错误。事实上,我看到4个前男友,然后是一个错误。这是如何解释的?bash手
#!/bin/bash
function x { echo x; }
x
(x)
echo `x`
echo $(x)
bash -c x
我希望看到“x”后面有4个错误。事实上,我看到4个前男友,然后是一个错误。这是如何解释的?bash手册页说明 当要执行内置或shell函数以外的简单命令时,将在单独的执行中调用该命令 环境包括以下内容
- 标记为导出的shell变量和函数,以及为命令导出的变量,在环境中传递
只有最后一个命令bash-cx在单独的执行环境中执行。bash手册页声明 当要执行内置或shell函数以外的简单命令时,将在单独的执行中调用该命令 环境包括以下内容
- 标记为导出的shell变量和函数,以及为命令导出的变量,在环境中传递
只有最后一个命令bash-cx在单独的执行环境中执行。感谢axiac发布了手动链接。通常我会在手册页中找到我需要的,但这里有点更深。所以我学会了:
谢谢大家 感谢axiac发布手动链接。通常我会在手册页中找到我需要的,但这里有点更深。所以我学会了:
谢谢大家 内置或shell函数不会运行子进程,如果你没有像“bash-c'x'”这样强制执行,那么我希望“x”(一个shell函数)不会在子进程中运行,我希望接下来的3行(不是内置或shell函数)会在子进程中运行。但是他们没有!这就是问题(回答如下)。这在中进行了解释。如果不强制执行类似“bash-c'x'”的命令,则内置或外壳函数不会运行子进程,因此我希望“x”(外壳函数)不会在子进程中运行,我希望接下来的3行(不是内置或外壳函数)会在子进程中运行。但是他们没有!这就是问题所在(回答如下)。这仍然令人困惑,因为我不清楚什么是shell环境或子shell环境,或者它们与执行环境的关系。看看手册,就像我在下面总结的一样,它们看起来都是一样的。此外,在本例中,您还删除了定义的相关部分,即在执行过程中定义的shell函数或在环境Cheers中从shell的父级继承的shell函数!这仍然令人困惑,因为我不清楚什么是shell环境或子shell环境,或者它们与执行环境的关系。看看手册,就像我在下面总结的一样,它们看起来都是一样的。此外,在本例中,您还删除了定义的相关部分,即在执行过程中定义的shell函数或在环境Cheers中从shell的父级继承的shell函数!