内置命令在bash中的含义是什么?

内置命令在bash中的含义是什么?,bash,shell,Bash,Shell,我读了bash手册的一部分。该项为“命令执行环境”。那部分说, 作为管道一部分调用的内置命令也在子shell环境中执行。对子shell环境所做的更改不会影响shell的执行环境 我想这意味着管道中更改的值是本地的,因为管道中的每个命令都在其自己的子shell中运行。像下面这样, value='1' echo "Before pipe, ${value}" value='2' | echo "${value}" | value='3' | echo "In another pipe, ${valu

我读了bash手册的一部分。该项为“命令执行环境”。那部分说,

作为管道一部分调用的内置命令也在子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
我在bash中阅读了“SHELL内置命令”。但我找不到“=”作为内置命令。“内置命令”在这里是什么意思?是否存在“非内置命令”,即使在管线中也会影响全局更改

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

  • (…)
  • 管道
    |

  • 我认为手册基本上是说内置命令,如
    echo
    printf
    read
    等,没有得到任何特殊处理,仍然在自己的子外壳中运行,尽管原则上shell可以确定管道中的所有命令都可以在同一shell中本机运行

    如果要求将一个命令通过管道传输到另一个命令,则无论管道两侧是什么,都会创建子壳

    例如:

    echo string | read foo
    

    使用两个内置函数,
    echo
    read
    ,但是变量
    $foo
    在管道完成后就不存在了。

    我想更多的是关于
    cd
    shopt
    set
    ,等等。@gniourf\gniourf fair point,尽管我很难想出一个使用这些命令的例子。想想看,我正在努力想出一个普遍的例子!我不确定我是否理解你的意思,但是
    cd
    shopt
    set
    在subshell中非常有用<代码>(cd目录| | |退出1;在这里做东西)#回到我以前的地方,而不需要cd回来,等等@gniourf | gniourf当然同意。也许我们对这个问题的解释不同……关键点是shell首先分叉,然后查看在生成的子shell中要运行的命令。虽然没有明确说明,但赋值本身实际上是一个退出状态为0的命令(假设值中未嵌入命令替换或进程替换)。