如何解决bash 进程替换 + 在主进程和子进程中使用相同的变量
如果我这样做
x=42
IFS= read -r x < <(echo "$x")
echo "$x"
我能保证返回 42,还是存在竞争条件,例如在管道 (cat /tmp/x | grep -v pat | cat >/tmp/x
) 中读取/写入同一个文件?
好的,对于 read
来说,这很明显,那么 mapfile
会怎样——它是否可以在派生替代进程之前清除目标(= 子进程的源)数组?
arr=( 'forty' 'two' )
mapfile -t arr < <(printf '%s\n' "${arr[@]}")
declare -p arr
编辑:也许更好的比较是
{ echo 42; echo 13; } >/tmp/x
cat >/tmp/x < <(grep -v 13 /tmp/x)
cat /tmp/x
解决方法
在主进程和子进程中使用相同的变量
每个进程都有自己的空间。它们是单独的变量。
我保证能拿回 42
是的。
是否可以在分叉替代进程之前清除目标(= 子进程的源)数组?
没有
子进程 <(...)
具有所有父环境的副本。它不会以任何方式影响父母。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。