bash - 循环退出后的局部变量

标签 bash

我在退出循环后遇到一些局部变量问题。尽管有以下代码,变量 max 最终值为 0:

max=0
cat tmp|while read line
do
temp=$(echo $line|tr -d "\n"|wc -c)
if [ $temp -gt $max ];then

max=$temp
echo $max
fi
done
echo -n tmp $max

cat tmp
12345
123456

这是我收到的输出:

5
6
 tmp 0

我不明白为什么 max 在退出循环后为 0,而在循环内却找到了正确的值。

最佳答案

管道启动一个新的子shell,它有自己的环境和变量空间。使用 < tmp而不是在循环的末尾。

关于bash - 循环退出后的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060082/

相关文章:

linux - Shell 命令不会在 Docker 构建中运行

bash - docker中的chain sleep命令是如何组成的?

linux - 使用shell脚本从两个列表中提取数据

用于清理旧备份文件的 Bash 脚本

linux - 确定定义 UNIX 别名的位置

linux - 在 GNU/Linux 上显示 CGI 错误的日志文件

linux - bash 获取管道的 fd

linux - 第三个远程服务器中的 Bash 变量

bash - 用于创建链接的脚本

macos - 在脚本中导出代表结帐时出错