shell 脚本中的变量,如何跨脚本使用?

2020-04-01 19:44:11 +08:00
 css3

首先考虑到使用source, 但用source也是实际上也是执行了一遍脚本,如何通过其他方式调用变量呢?

# a.sh
var1=3
# b.sh 这个脚本中想使用 var1 变量
bash a.sh
echo $var1
4527 次点击
所在节点    程序员
18 条回复
ALLLi
2020-04-01 19:45:34 +08:00
export
CallMeReznov
2020-04-01 19:57:13 +08:00
可以设置成环境变量
MeteorCat
2020-04-01 20:05:07 +08:00
写本地文件,另外脚本读
css3
2020-04-01 20:09:10 +08:00
source 会执行一遍 a.sh ,而我自己本身也需要通过 bash 执行一遍 a.sh ,如果只看这里,就觉得用 source 替代 bash 不就行了。可问题是我这个 a.sh 有命令行参数,source 不支持给 a.sh 传参数,所以困惑住了
oeagut
2020-04-01 22:08:36 +08:00
记得之前看教程,一个很傻瓜的办法就是 echo 出来,变通一下
fanhed
2020-04-01 22:27:08 +08:00
echo 出来, 需要考虑转义
然后其他脚本捕获后直接 eval
aloxaf
2020-04-01 22:35:15 +08:00
@css3 谁说 source 不支持传参的……
impl
2020-04-02 00:09:05 +08:00
# b.sh
eval `cat a.sh`
echo $var1
yangbonis
2020-04-02 00:26:29 +08:00
变量都是运行时的,你想访问就得解决同步的问题。source 也是一样的,规定了顺序而已。
tdtdttdd
2020-04-02 03:51:35 +08:00
@impl eval 好像是正解
wd
2020-04-02 06:18:51 +08:00
你去搜下 subshell
secsilm
2020-04-02 06:43:10 +08:00
需求简单的话就写本地文件,这样方便修改和管理
aaa5838769
2020-04-02 09:24:47 +08:00
最好写到本地文件中
tankren
2020-04-02 10:02:04 +08:00
第一个 shell 结尾把要传递的变量 export 到环境变量然后执行第二个 shell
FH0
2020-04-02 13:00:57 +08:00
var1=$var1 bash b\.sh
ps1aniuge
2020-04-02 13:31:03 +08:00
问:shell 脚本中的变量,如何跨脚本使用?
答:用 win,linux 通用的 powershell,并使用$global:abc=1

问:首先考虑到使用 source, 但用 source 也是实际上也是执行了一遍脚本,如何通过其他方式调用变量呢?
答:
本质上来讲,shell 脚本这块天生残废,没有按照跨脚本设计,也就没有跨脚本的功能。
本质上来讲,无法实现跨脚本使用变量。
$global:abc=1 在 powershell 中叫做全局变量。
本质上来讲 shell,和 py 里没有全局变量。看清楚,py (本质!)没有全局变量。

ps 第 14 课:变量的作用域
我在我写的课程里,有详细讲。
powershell 脚尊神殿。群=183173532 。入群索要教程。
sunziren
2020-04-02 14:10:49 +08:00
嗯,学到了学到了。
css3
2020-04-02 18:31:12 +08:00
@sunziren 卧槽,你这头像😁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658425

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX