V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
css3
V2EX  ›  程序员

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

  •  
  •   css3 · 2020-04-01 19:44:11 +08:00 · 4507 次点击
    这是一个创建于 1457 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    # a.sh
    var1=3
    
    # b.sh 这个脚本中想使用 var1 变量
    bash a.sh
    echo $var1
    
    18 条回复    2020-04-02 18:31:12 +08:00
    ALLLi
        1
    ALLLi  
       2020-04-01 19:45:34 +08:00 via Android
    export
    CallMeReznov
        2
    CallMeReznov  
       2020-04-01 19:57:13 +08:00
    可以设置成环境变量
    MeteorCat
        3
    MeteorCat  
       2020-04-01 20:05:07 +08:00 via Android
    写本地文件,另外脚本读
    css3
        4
    css3  
    OP
       2020-04-01 20:09:10 +08:00 via iPhone
    source 会执行一遍 a.sh ,而我自己本身也需要通过 bash 执行一遍 a.sh ,如果只看这里,就觉得用 source 替代 bash 不就行了。可问题是我这个 a.sh 有命令行参数,source 不支持给 a.sh 传参数,所以困惑住了
    oeagut
        5
    oeagut  
       2020-04-01 22:08:36 +08:00 via iPhone
    记得之前看教程,一个很傻瓜的办法就是 echo 出来,变通一下
    fanhed
        6
    fanhed  
       2020-04-01 22:27:08 +08:00
    echo 出来, 需要考虑转义
    然后其他脚本捕获后直接 eval
    aloxaf
        7
    aloxaf  
       2020-04-01 22:35:15 +08:00
    @css3 谁说 source 不支持传参的……
    impl
        8
    impl  
       2020-04-02 00:09:05 +08:00
    # b.sh
    eval `cat a.sh`
    echo $var1
    yangbonis
        9
    yangbonis  
       2020-04-02 00:26:29 +08:00 via iPhone
    变量都是运行时的,你想访问就得解决同步的问题。source 也是一样的,规定了顺序而已。
    tdtdttdd
        10
    tdtdttdd  
       2020-04-02 03:51:35 +08:00 via Android
    @impl eval 好像是正解
    wd
        11
    wd  
       2020-04-02 06:18:51 +08:00 via iPhone
    你去搜下 subshell
    secsilm
        12
    secsilm  
       2020-04-02 06:43:10 +08:00 via Android
    需求简单的话就写本地文件,这样方便修改和管理
    aaa5838769
        13
    aaa5838769  
       2020-04-02 09:24:47 +08:00
    最好写到本地文件中
    tankren
        14
    tankren  
       2020-04-02 10:02:04 +08:00
    第一个 shell 结尾把要传递的变量 export 到环境变量然后执行第二个 shell
    FH0
        15
    FH0  
       2020-04-02 13:00:57 +08:00
    var1=$var1 bash b\.sh
    ps1aniuge
        16
    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
        17
    sunziren  
       2020-04-02 14:10:49 +08:00
    嗯,学到了学到了。
    css3
        18
    css3  
    OP
       2020-04-02 18:31:12 +08:00
    @sunziren 卧槽,你这头像😁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5345 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 05:49 · PVG 13:49 · LAX 22:49 · JFK 01:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.