微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash 进程替换 + 在主进程和子进程中使用相同的变量

如何解决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 举报,一经查实,本站将立刻删除。