0

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

我写了以下代码:

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

当我在终端中执行此操作时,我得到以下结果:

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 脚本时,它是这样的:

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

4

1 回答 1

5

为什么它会这样?

for取决于$IFS。你已经改变了$IFS,因此如何for工作。

如何让脚本表现得像终端?

find ... -print0 | while read -d $'\0' f
do
   ...
done

或者...

while read -d $'\0' f
do
   ...
done < <(find ... -print0)
于 2013-06-04T14:29:36.273 回答