内置命令在bash中意味着什么?

时间:2016-10-05 09:37:16

标签: bash shell

我阅读了bash手册的一部分。该项目是" COMMAND EXECUTION ENVIRONMENT"。该部分说,

  

作为管道的一部分调用的内置命令也在子shell环境中执行。对子shell环境所做的更改不会影响shell的执行环境。

我认为这意味着管道中更改的值是本地的,因为管道中的每个命令都在其自己的子shell中运行。如下,

value='1'
echo "Before pipe, ${value}"
value='2' | echo "${value}" | value='3' | echo "In another pipe, ${value}"
echo "After pipe, ${value}"

Before pipe, 1
In another pipe, 1
After pipe, 1

我读了#34; SHELL BUILTIN COMMANDS"在bash中。但我找不到" ="作为内置命令。什么"内置命令"意味着什么?是否有"非内置命令"即使在管道中也会影响全球的变化?

如果您不介意,请告诉我新的子shell运行时除外:

  1. (...)
  2. 管道|

1 个答案:

答案 0 :(得分:3)

我认为该手册基本上是说内置命令,例如echoprintfread等,没有得到任何特殊处理,仍然在他们自己的子shell,即使在原则上,shell也可以确定管道中的所有命令都可以在同一个shell中本机运行。

如果要求将一个命令传递给另一个命令,则无论管道两侧是什么,都会创建子shell。

例如:

echo string | read foo

使用两个内置插件echoread,但在管道完成后变量$foo不再存在。