我正在尝试遍历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
发布于 2013-06-04 22:29:36
为什么会这样呢?
for依赖于$IFS。您已经更改了$IFS以及for的工作方式。
如何让脚本像终端一样运行?
find ... -print0 | while read -d $'\0' f
do
...
doneor...
while read -d $'\0' f
do
...
done < <(find ... -print0)https://stackoverflow.com/questions/16920341
复制相似问题