Bash脚本-存储find命令输出,变量中不带空格
我希望能够自动化我的xcode项目。除了带有空格的项目名称外,所有这些都可以正常工作。我尝试了以下命令:Bash脚本-存储find命令输出,变量中不带空格,bash,Bash,我希望能够自动化我的xcode项目。除了带有空格的项目名称外,所有这些都可以正常工作。我尝试了以下命令: output_apps=`find ./ -name "*.app" -print` output_apps=`find ./ -name "*.app"` 当我跑的时候 find ./ -name "*.app" -print 在不存储到变量中的情况下,它会按预期输出,如下所述: .//Ten EU.app .//Ten Official App EU.app .//Ten Offi
output_apps=`find ./ -name "*.app" -print`
output_apps=`find ./ -name "*.app"`
当我跑的时候
find ./ -name "*.app" -print
在不存储到变量中的情况下,它会按预期输出,如下所述:
.//Ten EU.app
.//Ten Official App EU.app
.//Ten Official App.app
.//Ten.app
但是,当我将上述命令的输出存储在变量中时,如下所示
output_apps=`find ./ -name "*.app" -print`
然后运行以下for循环以获取名称
for curr_app in $o
do
echo "$curr_app"
done
它表明
.//Ten
EU.app
.//Ten
Official
App
EU.app
.//Ten
Official
App.app
.//Ten.app
如何维护每个输出之间的空格并获得以下输出
Ten EU.app
Ten Official App EU.app
Ten Official App.app
Ten.app
文件名可能包含空格。您需要请求find通过
NULL(\0)
将它们分开。使用find-print0
如果不需要将文件名存储在变量中,则可以结合使用。这将按NUL字节而不是换行符分隔找到的条目xargs
读取这些NUL分隔的值,并使用尽可能多的参数调用某些命令
find ./ -name "*.app" -print0 | xargs -0 some-command
如果需要,可以使用xargs-n1
find ./ -name "*.app" -print0 | xargs -0 -n 1 some-command
另一种方法是使用while
循环读取文件
find ./ -name "*.app" -print | while read f; do
some-command "$f"
done
这会一次使用一个文件调用某个命令。重要的一点是将
$f
括起来。已知世界中的任何力量都无法将NUL字节放入bash变量中。很抱歉,我无法将您的答案解释为完整的命令。我尝试了output=find./-name“*.app”-print0
。如何调整NULL(\0)@Vebz这不是一个完整的答案。首先,您需要非标准(但通用)的-print0
功能(这是一件好事)。然后,您需要一种读取NUL分隔流的方法(更难。如果没有非标准的额外功能,通常也不可能。请查看Bash的read-d
)。如果您需要存储结果,您将需要使用数组。完整的示例是for i in$(find-print0 | xargs-0echo);不要重复$i;完成
@alinsoar您的方法带来的结果与我的相同。(即使我将双引号添加到“$I”。有两种解决方案…一种是while
循环,另一种是read
循环。当名称从文件名中提取时,while循环起作用。但是,我正在从xcodebuild命令的管道重定向后提取所需文件。有没有办法将find作为while循环的输入?谢谢@Olaf。fi前两次查询的结果是//Ten EU.app//Ten Official app EU.app//Ten Official app.app//Ten Official app.app//Ten.app
。我将尝试按照Ormaj的建议将它们放入一个数组中。如果失败,我将按照zplesivcak的建议创建一个临时文件,放入值并从中读取。代码多得多,这一小部分已经占了上风呃。如何将它们放入数组?@vvn一种方法是使用while循环并逐个添加值。另请参阅问题