8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

读入管道中的变量时会发生什么?

ekse 1月前

15 0

echo hello | read strecho $str此读取在管道之后执行,这意味着 echo 的输出被读入 str - 但是因为它在管道之后,所以 str 的内容现在是...

echo hello | read str
echo $str

read 是在管道之后执行的,这意味着的输出 echo 被读入 str - 但因为它是在管道之后,所以的内容 str 现在位于子 shell 中,无法被父 shell 读取。

的内容会发生什么 str ?管道是否会创建一个子 shell,然后一旦内容被读入 str ,父进程是否会终止子进程并被 str 删除 - 或者的内容是否 str 存在于 shell 之外的某个地方?比如我们如何查看子 shell 中的内容?我们能从父 shell 访问子 shell 吗?

帖子版权声明 1、本帖标题:读入管道中的变量时会发生什么?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由ekse在本站《bash》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在您的示例中, $str 存在于子 shell 中,默认情况下,一旦行结束,它就会消失。子进程无法修改其父进程。

    除了更改 shell 选项之外 lastpipe ,您还可以更改代码以避免使用管道。在这种情况下,您可以使用:

    read str < <(your command) 
    # or
    str=$(your command)
    

    这两者也都创建了子 shell,但是 $str 被分配给了父进程。

  • 的值 ${str} 仅在子 shell 的生命周期内存在。管道的左侧或右侧是父 shell 还是子 shell 取决于具体的 shell 和 shell 版本。

    Bash 4.x 有一个选项, shopt -s lastpipe 可以在父 shell 中运行管道的最后一个命令,就像 ksh93 默认做的那样。然后的值 $str 将保持不变。

返回
作者最近主题: