我在bash中遇到了一个脚本问题。我的for函数是使用find函数的结果。
长话短说:在SSH中,找到函数返回2个结果,并在bash脚本中找到一个结果。
我尝试了以下两个代码。
for f in $(find $path -name *.properties)
do
echo $f
done
OR
list=$(find $path -name *.properties)
for f in $list;
do
echo $f
done
在指定的路径中有几个文件夹和文件,其中两个文件具有我要查找的扩展名。如果我在SSH中运行其中一个命令,我会找到这两个文件,但是如果我从bash脚本运行该命令,则结果包含一个文件。
for函数工作正常,问题是find函数。我在脚本bash中运行以下代码,但仍然有一个结果。
list=$(find $path -name *.properties)
echo $list
我在SSH中运行以下代码,我找到了2个文件:
[root@was85 ~]# for f in $(find $path/temp/ -name *.properties); do echo $f
> done
任何人都可以帮助我吗?
谢谢!
答案 0 :(得分:1)
如果使用BASH
更好地使用while
循环并使用正确引用并使用process substitution
选项:
-print0
答案 1 :(得分:0)
如果使用bash
4或更高版本,请使用globstar
运算符而不是对find
的vanilla调用来简单地递归文件层次结构。
shopt -s globstar
for f in "$path"/**/*.properties; do
echo "$f"
done
(如果正文 只是echo $f
,那么printf "%s\n" "$path"/**/*.properties
就足够了,而不是使用循环。)