Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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:调用函数时没有返回值_Bash - Fatal编程技术网

Bash:调用函数时没有返回值

Bash:调用函数时没有返回值,bash,Bash,我是stackoverflow和bash脚本的新手,所以请对我放松!我一直在努力编写一个bash脚本:当我试图从脚本中调用函数“main”时,如下所示: variable=$("main -t $path/$i") 我得到错误“main-t./folder:没有这样的文件或目录”;有什么想法吗 提前谢谢 编辑:谢谢Jkbkot,我现在这样称呼它: variable=$(main -t "$path/$i") 对原始错误进行了排序,但仍有问题:“variable”似乎没有被分配函数中回显的值,

我是stackoverflow和bash脚本的新手,所以请对我放松!我一直在努力编写一个bash脚本:当我试图从脚本中调用函数“main”时,如下所示:

variable=$("main -t $path/$i")
我得到错误“main-t./folder:没有这样的文件或目录”;有什么想法吗

提前谢谢

编辑:谢谢Jkbkot,我现在这样称呼它:

variable=$(main -t "$path/$i")
对原始错误进行了排序,但仍有问题:“variable”似乎没有被分配函数中回显的值,尽管手动调用函数会打印正确的值。为什么会发生这种情况

编辑:我似乎在正确地呼叫和回音,但在调用“main”时,递归调用与初始调用的行为似乎有所不同。例如,它在以下情况下运行良好:

variable=$(main -t "$path/$i") #A line within 'main'
然后像预期的那样再次开始,但这一次当它遇到“中断”时就停止了,显然中断了整个函数调用,而不是当前的“案例”。在bash中是否有一些我不知道的“突破”怪癖


注:不幸的是,该脚本是我所在大学的一项作业,其许多学生和教师都使用此网站,因此公开发布我的解决方案可能会产生负面影响。

您必须称其为不带引号的脚本:

variable=$(main -t $path/$i)
正如@janos所说,您可能需要在变量周围加引号,以防它们可能包含空格等:

variable=$(main -t "$path/$i")

小心,他可能非常需要里面的引号:
variable=$(main-t“$path/$i”)
true,他可能只需要变量周围的引号就行了,但我遇到了一个不同的问题,上面详述了。这将有助于查看您的实际代码,特别是main函数。例如,以下工作:
#/bin/bash main()。也许你的功能主要输出到stderr而不是stdout?正如我在上面添加的,我真的不能发布完整的代码。我怎么知道我要输出到哪一个?我只是在使用“echo”。试着运行我之前评论中的代码片段,看看它是否能按预期工作。您可以将最后一个echo更改为
echo变量:$VARIABLE
,以避免对您看到的echo的输出产生任何混淆。警告stderr,您可以尝试将stderr重定向到stdout:
variable=$(main-t“$path/$i”2>&1)
,如果它工作,那么您的函数将输出到stderr。此外,您还可以通过将
set-x
放在脚本的开头(在hashbang之后的一行)来启用“调试”。最后,您又回到了这个问题上,上面的代码片段成功了。我查看了上的调试,发现了问题所在,我已经在上面写了。所有问题都解决了,谢谢朋友。