【发布时间】:2023-03-16 14:55:02
【问题描述】:
我正在使用一个不断增长的 bash 脚本,在这个脚本中我有许多功能。其中一个函数应该返回一个变量值,但我遇到了一些语法问题。下面是代码示例。
ShowTags() {
local tag=0
read tag
echo "$tag"
}
selected_tag=$(ShowTags)
echo "$selected_tag"
从 Linux Journal 文章中提取了这段代码,但问题是它似乎不起作用,或者它可能起作用并且我错过了一些东西。本质上,每当调用该函数时,脚本都会挂起并且不输出任何内容,我需要 CTRL+C 回退到 CLI。
有问题的文章如下。
http://www.linuxjournal.com/content/return-values-bash-functions
所以我的问题是这是返回值的正确方法吗?有没有更好或更可靠的方法来做到这一点?如果有请给我一个例子,这样我就可以在不使用全局变量的情况下解决这个问题。
编辑:
这种行为现在真的让我感动。我正在使用以下脚本。
ShowTags() {
echo "hi"
local tag=0
read tag
echo "$tag"
}
selected_tag=$(ShowTags)
echo "$selected_tag
基本上发生的情况是 bash 会表现得好像读取命令发生在函数顶部的 echo 标记之前。只要我通过一些要阅读的内容,它就会运行顶部回显,并完成脚本的其余部分。我不确定为什么会这样。这正是我的主脚本中发生的事情。
【问题讨论】:
-
为什么要编辑问题中的代码?现在它和答案中的完全一样,所以答案没有意义。你写问题的时候是不是抄袭错误?
-
我编辑了代码以反映它在我的脚本中出现的样子。问题不在于语法。当我尝试通过命令替换调用函数时,脚本只是挂断了。
-
read tag命令正在等待您输入内容。 -
我试过了,对我来说效果很好。输入
selected_tag=$(ShowTags)后,我输入了一些内容。然后echo "$selected_tag"显示我输入的内容。 -
我用我整理的快速脚本更新了我的顶级帖子,并更好地解释了 bash 正在做什么。