gpt4 book ai didi

bash 。继承函数作用域

转载 作者:行者123 更新时间:2023-11-29 09:21:26 25 4
gpt4 key购买 nike

у我需要一个全局计数器和一个函数来一个一个地返回数字。例如,我希望此脚本回显 6、7、8(但它回显 6、6、6):

#!/bin/bash

port_counter=5

function get_free_port {
port_counter=$((port_counter + 1))
echo ${port_counter}
}

function foo {
echo $(get_free_port)
}

foo
foo
(foo;)&

如何获得 6,7,8?

更新:好的,在 chepner 的回答之后,我需要具体说明我的问题。如果我需要使用 get_free_port 作为 foo 中的变量,我不能使用这种方法,不是吗?所以我不会写

function foo {
variable=get_free_port # variable=$(get_free_port) was ok, but returns 6,6,6
echo ${variable}
}

还有 foo & - 类似的用法是不可取的

最佳答案

您不能修改子进程中的变量(这是 $(...) 运行的)。在这种情况下你不需要:

function foo {
get_free_port
}

但是,出于同样的原因,您也不能从子 shell 或后台作业中调用 foofoo &(foo)(foo)& 都不会在当前更新 port_counter 的值外壳。

如果您确实需要调用 get_free_port 捕获其输出,则需要使用一个临时文件。例如:

foo () {
get_free_port > some_temp_file
cat some_temp_file
}

如果这不合适,您可能需要重新考虑脚本的设计。

关于 bash 。继承函数作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com