Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本-存储find命令输出,变量中不带空格_Bash - Fatal编程技术网

Bash脚本-存储find命令输出,变量中不带空格

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

我希望能够自动化我的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 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循环并逐个添加值。另请参阅问题