我阅读了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运行时除外:
(...)
|
答案 0 :(得分:3)
我认为该手册基本上是说内置命令,例如echo
,printf
,read
等,没有得到任何特殊处理,仍然在他们自己的子shell,即使在原则上,shell也可以确定管道中的所有命令都可以在同一个shell中本机运行。
如果要求将一个命令传递给另一个命令,则无论管道两侧是什么,都会创建子shell。
例如:
echo string | read foo
使用两个内置插件echo
和read
,但在管道完成后变量$foo
不再存在。