rob*_*ert 9 bash export function echo
我有这样的代码:
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
echo "some output"
}
final_output="the otput is $(test_this)"
echo "$ABC"
Run Code Online (Sandbox Code Playgroud)
不幸的是,变量ABC没有被设置.
我必须这样调用test_this,因为在我的真实程序中我给它一些参数,它执行各种复杂的操作调用各种其他函数,这些函数导出这个或那个(基于这些参数),最后一些输出字符串被组装以返回.调用它两次,一次获取导出,一次输出字符串就不好了.
问题是:我可以做什么来使输出和输出字符串到位,但只需要调用一个这样的函数?
我很满意的答案(谢谢你paxdiablo):
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
export A_VERY_OBSCURE_NAME="some output"
}
test_this
final_output="the otput is $A_VERY_OBSCURE_NAME"
echo "$ABC" #works!
unset A_VERY_OBSCURE_NAME
Run Code Online (Sandbox Code Playgroud)
是的,它是被设置.不幸的是,它被设置在由运行函数创建的子进程中,并且对父进程没有影响.$()test_this
调用它两次可能是最简单的方法,例如(使用"秘密"参数值来指示行为,如果它需要不同):
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
if [[ "$1" != "super_sekrit_sauce" ]] ; then
echo "some output"
fi
}
final_output="the output is $(test_this)"
echo "1:$ABC:$final_output"
test_this super_sekrit_sauce
echo "2:$ABC:$final_output"
Run Code Online (Sandbox Code Playgroud)
哪个输出:
1::the output is some output
2:ABC:the output is some output
Run Code Online (Sandbox Code Playgroud)
如果你真的只想打电话一次,你可以这样做:
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
export OUTPUT="some output"
}
test_this
final_output="the output is ${OUTPUT}"
echo "1:$ABC:$final_output"
Run Code Online (Sandbox Code Playgroud)
换句话说,使用与其他信息相同的方法来提取输出.
| 归档时间: |
|
| 查看次数: |
8075 次 |
| 最近记录: |