作者回复: 1 内部命令在子进程中的执行行为不会影响到父进程,并非执行结果的显示
2 history | wc -l 这条命令是把history的标准输出作为了wc的标准输入(这是管道的默认功能),wc执行的时候会创建子进程,并把标准输出指向父进程(当前shell)的标准输出,所以看到输出结果是63
3 对变量赋值操作 echo 123 | read a ,再查看 a变量的值 echo $a 是空值,这才是需要避免的子进程没有把变量返回给父进程的错误示例。
作者回复: 1 试一下 单独运行cat 和 cat <<< "hello" ,你会发现cat如果有输入并正常结束,是不会产生阻塞的;也就是执行ps命令的时候,cat命令已经执行结束了,自然看到cat进程。
2 管道符会产生子进程,cd /var 相当于执行bash 然后运行了cd /var 再执行了exit ,所以当前shell下“没起作用”
作者回复: 执行之前先使用unset b,是否父进程提前为b做了赋值?
另外vscode我这里没有复现环境,考虑用标准的RHEL7试一下