我无法从循环内部传递变量.
码:
# find all output.txt that has been modified last 24h ...
PROCESSED=1
find ${PROCESSED_DIR} -mtime -1 -name "output.txt" | while read i
do
# .. and compare those with TMP_TXT
if diff $i ${TMP_TXT} > /dev/null
then
# If both are same EXIT search loop
PROCESSED=0
exit
fi
done
echo "PROCESSED=${PROCESSED}"
Run Code Online (Sandbox Code Playgroud)
这将始终输出1.任何想法如何使PROCESSED = 0?
这是在Solaris 9计算机上完成的.
原因是while-command在管道内运行,这意味着它在子shell中运行,因此变量赋值不会传播到调用shell.
一种解决方案是重定向输入(您可能需要先将其写入临时文件):
while read f; do
...
done < foo.tmp
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用while命令中的stdout传播以下值PROCESSED:
PROCESSED=`find | while read f; do
echo "Echo other stuff on stderr" >&2
echo 1
done`
Run Code Online (Sandbox Code Playgroud)