我试图在bash脚本中循环遍历一堆文件,特别是我的hive maven repo中的所有jar.
我写了以下代码:
for f in $(find /home/c4stor/.m2/repository/org/apache/hive/ -iname '*.jar'); do
echo "Jar found :":$f;
done
Run Code Online (Sandbox Code Playgroud)
当我在终端中执行此操作时,我得到以下结果:
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....)
Run Code Online (Sandbox Code Playgroud)
当我使用完全相同的内容运行我的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....)
Run Code Online (Sandbox Code Playgroud)
即,for循环所有连接的文件路径的单个元素复合.这不是我想要的.
有没有人有线索:1.为什么这样做?2.如何使脚本像终端一样?
谢谢:) C4stor
为什么这样做?
for取决于$IFS.你改变了$IFS,因此for有效.
如何使脚本像终端一样?
find ... -print0 | while read -d $'\0' f
do
...
done
Run Code Online (Sandbox Code Playgroud)
while read -d $'\0' f
do
...
done < <(find ... -print0)
Run Code Online (Sandbox Code Playgroud)