Why is “echo foo | read a ; echo $a” not working as expected?

前端 未结 8 1926
慢半拍i
慢半拍i 2021-02-04 15:37

I could replicate the problem with various shells under FreeBSD, GNU/Linux, and Solaris. It had me head-scratching for more than an hour, so I decided to post the question here

8条回答
  •  遇见更好的自我
    2021-02-04 16:31

    alternative:

    echo foo | (read a ; echo $a)
    

    Edit:

    If you need $a outside the subshell, you have to reverse the commands:

    read a < <(echo foo); echo $a
    

    this way the read is executed in the current process

提交回复
热议问题