Shellcheck 抱怨我不应该在同一管道中读取和写入同一文件

Shellcheck 抱怨我不应该在同一管道中读取和写入同一文件

外壳检查显示这行代码的以下错误:

printf '%d' $(($(< "$1") + 1)) > "$1"

确保不要在同一个管道中读写同一个文件

这真的是个问题吗?读取和写入同一文件会导致竞争条件吗?

答案1

是的,这是一个问题,您永远无法从同一管道读取和写入。可以这样想:写入文件会将其设置为空,然后从中读取不会产生任何结果。

答案2

是的,并行读取和写入同一文件可能会导致竞争条件。使用同一命令对同一文件进行输入和输出重定向会在开始读取文件之前截断该文件。

但不,这不是这里发生的事情。这是 Shellcheck 中的误报。这里的重定向位于算术表达式内。所有替换(算术、变量、命令以及拆分和通配符)均在执行重定向之前执行。所以当> "$1"打开文件时,读取位就完成了。

相关内容