首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环"find“会导致bash

循环"find“会导致bash
EN

Stack Overflow用户
提问于 2013-06-04 22:23:15
回答 1查看 111关注 0票数 0

我正在尝试遍历bash脚本中的一堆文件,特别是我的hive maven repo中的所有jar文件。

我写了以下代码:

代码语言:javascript
复制
for f in $(find /home/c4stor/.m2/repository/org/apache/hive/  -iname '*.jar'); do
  echo "Jar found :":$f;
done

当我在我的终端中执行这个命令时,我得到了以下结果:

代码语言:javascript
复制
Jar found :/home/c4stor/.m2/repository/org/apache/hive/hive-serde/0.10.0-cdh4.2.1/hive-serde-0.10.0-cdh4.2.1.jar
Jar found :/home/c4stor/.m2/repository/org/apache/hive/hive-common/0.9.0/hive-common-0.9.0.jar
(etc....)

当我用完全相同的内容运行我的bash脚本时,它是这样的:

代码语言:javascript
复制
Jar found :/home/c4stor/.m2/repository/org/apache/hive/hive-serde/0.10.0-cdh4.2.1/hive-serde-0.10.0-cdh4.2.1.jar /home/c4stor/.m2/repository/org/apache/hive/hive-common/0.9.0/hive-common-0.9.0.jar (etc....)

也就是说,for在连接的所有文件路径的单个元素组合上循环。这可不是我想要的。

有没有人知道: 1.为什么会这样? 2.如何让脚本像终端一样运行?

感谢:) C4stor

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 22:29:36

为什么会这样呢?

for依赖于$IFS。您已经更改了$IFS以及for的工作方式。

如何让脚本像终端一样运行?

代码语言:javascript
复制
find ... -print0 | while read -d $'\0' f
do
   ...
done

or...

代码语言:javascript
复制
while read -d $'\0' f
do
   ...
done < <(find ... -print0)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16920341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档