在 while 循环内部设置的 Shell 变量在其外部不可见

2023-12-04

我试图找到其中字符最多的路径名。可能有更好的方法来做到这一点。但我想知道为什么会出现这个问题。

LONGEST_CNT=0
find samples/ | while read line
do
    line_length=$(echo $line | wc -m)
    if [[ $line_length -gt $LONGEST_CNT ]] 
    then
        LONGEST_CNT=$line_length
        LONGEST_STR=$line
    fi
done

echo $LONGEST_CNT : $LONGEST_STR

它总是以某种方式返回:

0 :

如果我在 while 循环内打印调试结果,则值是正确的。那么为什么 bash 不将这些变量设为全局变量呢?


当你通过管道输入while在 Bash 中循环,它创建一个子 shell。当子 shell 退出时,所有变量都会返回到它们之前的值(可能为 null 或未设置)。这可以通过使用进程替换来防止。

LONGEST_CNT=0
while read -r line
do
    line_length=${#line}
    if (( line_length > LONGEST_CNT ))
    then
        LONGEST_CNT=$line_length
        LONGEST_STR=$line
    fi
done < <(find samples/ )    # process substitution

echo $LONGEST_CNT : $LONGEST_STR
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 while 循环内部设置的 Shell 变量在其外部不可见 的相关文章

随机推荐

  • 如何为另一个使用 stdin 输入的函数编写测试函数?

    作为大学作业的一部分 我有以下职能 int readMenuOption local declarations char option 2 read in 1 char from stdin plus 1 char for string t
  • 播放音频并继续播放

    我正在用 C 在 unity 5 中制作一个小游戏 到目前为止 我已经成功设计了关卡并完成了一些基本的脚本编写 目前 我有一个触发器 可以生成一个对象 并希望它在用户输入后播放并播放音频源 然而 因为我希望它是一个跳跃恐慌 所以触发器非常小
  • Boost Python 1.48 在导出 32 位枚举时失败

    较新版本的 Boost Python 是否支持从 C 导出完整的 32 位枚举 我使用的是 1 48 并且能够导出最多 30 位 但当我尝试导出 32 位数字时 由于 访问冲突读取位置 0x00000001 每次都会失败 深入研究 enum
  • ValueError:值的长度与索引的长度不匹配 |熊猫 DataFrame.unique()

    我正在尝试获取新的数据集 或将当前数据集列的值更改为其唯一值 这是我想要得到的示例 A B 0 1 1 1 2 5 2 1 5 3 7 9 4 7 9 5 8 9 Wanted Result Not Wanted Result A B A
  • 为什么有些 php 文件不以右括号“?>”结尾? [复制]

    这个问题在这里已经有答案了 我一直在使用 Wordpress 和其他 CMS 我注意到一些 php 文件没有结束语 gt 当我编写自己的文件时 我必须包含 gt 否则软件崩溃 我想知道他们是如何让它工作的 或者主题的特定部分是否接受这种类型
  • 如何知道文件复制完成

    我正在使用 ReadDirectoryChangesW 来监视一个文件夹 如果我将一个大文件复制到该文件夹 我可以收到多个 FILE ACTION MODIFIED 消息 似乎每次 Windows 写入一大块文件时 您都会收到每个文件修改的
  • Microsoft.Identity.Web 和 ASP.NET Core SignalR JWT 身份验证

    我正在使用 ASP NET Core 制作一个 Web 应用程序 该应用程序还使用 SignalR Core 来提供实时功能 我使用 Azure AD B2C 进行用户管理 我已经成功使用了Microsoft Identity Web ht
  • Spring中初始化多个数据库

    我正在使用 AbstractRoutingDatasource 在运行时在数据库之间进行路由 在 informix 数据库的实际情况下 一切工作正常 为了进行测试 我创建了一个 spring 配置文件以在内存 H2 数据库中使用 使用测试配
  • 如何在运行一次后“禁用”javascript函数

    所以我有两个 html 按钮 每个按钮运行不同的功能 两个功能都在下面 基本上 您单击两个按钮之一即可将 Google 地图操作侦听器添加到地图 我已经成功地让它发挥作用了 唯一的问题是我只希望动作监听器一键可用 单击一次之后 我希望用户必
  • if/else 构造内部和外部函数

    当我查看 R 函数时 我经常发现以下结构 f lt function exp T if exp a lt 1 else a lt 2 f f F 这将运行而不会出现错误 但是执行内部函数代码会引发错误 因为 R 可能假设该语句在第一次赋值后
  • iPhone - 保存 UIImageView 状态

    我创建了 UIImageView 的子类 并且正在子类本身内部处理其对象的触摸 现在 当用户即将退出应用程序时 我想保存图像的状态 由于图像上可能发生了多次转换 我将所有转换保存在一个数组中 我希望能够将这些对象保存在 applicatio
  • 导致 TFS InvokeProcess 构建活动在其他凭据下运行

    我们使用 InvokeProcess 操作自定义了构建过程 该操作运行部署 sln 的 powershell 脚本 问题是该脚本必须在给定用户 而不是 tfsbuild 用户 下运行 我们怎样才能做到这一点 替代方案 1 创建 Invoke
  • [].append(x) 行为

    这按照我的预期执行 gt gt gt x gt gt gt x append 3 gt gt gt x 3 为什么以下返回 None gt gt gt x append 3 gt gt gt x gt gt gt because list
  • openCV 中的结果比较Hist

    我正在尝试比较我存储为数组的两个直方图 我是 C 接口 cv Mat 和 OpenCV 中计算直方图的新手 My code int testArr1 4 12 10 11 11 int testArr2 4 12 0 11 0 cv Mat
  • 在 C# 中使用 POST/httpwebrequest 上传 zip 文件

    我正在尝试代码http www paraesthesia com archive 2009 12 16 posting multipartform data using net webrequest aspx通过 httpwebreques
  • 如何在超级账本结构中获取资产修改历史记录

    我在用IBM Bluemix 区块链服务为我的资产共享演示尝试一些智能合约逻辑 无论如何 是否可以查询超级账本结构网络中的资产修改历史记录 我检查了 Fabric 0 6 和 1 0 版本的文档 但我只能找到stub pushState k
  • 是否可以从 bdist 中排除数据文件源和中间文件?

    我正在使用 setuptools 构建许多数据文件 编译的翻译 图标调整大小并转换为不同的格式等 我想将这些数据文件的来源包含在sdist和构建结果 但不是它们的源和中间文件bdist wheel 当我使用package data源文件 中
  • 在值/键上加入 AngularFire 路径不起作用(将用户配置文件合并到记录中)

    我正在使用 Firebase 1 0 和 Angular 1 4 开发一个应用程序 我遇到的问题是确保视图中的数据与 Firebase 同步 同时从 Firebase 中的两个表获取非规范化数据 图书表如下所示 books JyDpkQrU
  • 检索由shiny::reactive()推断的反应性依赖关系

    考虑一下这个推介会Joe Cheng 解释了他和他的同事如何在闪亮中实现响应式框架 其灵感来自于Meteor 实际问题 有人可以向我解释一下我将如何找到一个反应式对象的依赖关系 即列出它们的名称和环境 实际访问它们等 这些是由shiny r
  • 在 while 循环内部设置的 Shell 变量在其外部不可见

    我试图找到其中字符最多的路径名 可能有更好的方法来做到这一点 但我想知道为什么会出现这个问题 LONGEST CNT 0 find samples while read line do line length echo line wc m