• 请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX  ›  程序员

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

  •  
  •   css3 · Apr 1, 2020 · 5400 views
    This topic created in 2259 days ago, the information mentioned may be changed or developed.

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

    # a.sh
    var1=3
    
    # b.sh 这个脚本中想使用 var1 变量
    bash a.sh
    echo $var1
    
    18 replies    2020-04-02 18:31:12 +08:00
    ALLLi
        1
    ALLLi  
       Apr 1, 2020 via Android
    export
    CallMeReznov
        2
    CallMeReznov  
       Apr 1, 2020
    可以设置成环境变量
    MeteorCat
        3
    MeteorCat  
       Apr 1, 2020 via Android
    写本地文件,另外脚本读
    css3
        4
    css3  
    OP
       Apr 1, 2020 via iPhone
    source 会执行一遍 a.sh ,而我自己本身也需要通过 bash 执行一遍 a.sh ,如果只看这里,就觉得用 source 替代 bash 不就行了。可问题是我这个 a.sh 有命令行参数,source 不支持给 a.sh 传参数,所以困惑住了
    oeagut
        5
    oeagut  
       Apr 1, 2020 via iPhone
    记得之前看教程,一个很傻瓜的办法就是 echo 出来,变通一下
    fanhed
        6
    fanhed  
       Apr 1, 2020
    echo 出来, 需要考虑转义
    然后其他脚本捕获后直接 eval
    aloxaf
        7
    aloxaf  
       Apr 1, 2020
    @css3 谁说 source 不支持传参的……
    impl
        8
    impl  
       Apr 2, 2020
    # b.sh
    eval `cat a.sh`
    echo $var1
    yangbonis
        9
    yangbonis  
       Apr 2, 2020 via iPhone
    变量都是运行时的,你想访问就得解决同步的问题。source 也是一样的,规定了顺序而已。
    tdtdttdd
        10
    tdtdttdd  
       Apr 2, 2020 via Android
    @impl eval 好像是正解
    wd
        11
    wd  
       Apr 2, 2020 via iPhone
    你去搜下 subshell
    secsilm
        12
    secsilm  
       Apr 2, 2020 via Android
    需求简单的话就写本地文件,这样方便修改和管理
    MilkShake
        13
    MilkShake  
       Apr 2, 2020
    最好写到本地文件中
    tankren
        14
    tankren  
       Apr 2, 2020
    第一个 shell 结尾把要传递的变量 export 到环境变量然后执行第二个 shell
    FH0
        15
    FH0  
       Apr 2, 2020
    var1=$var1 bash b\.sh
    ps1aniuge
        16
    ps1aniuge  
       Apr 2, 2020
    问:shell 脚本中的变量,如何跨脚本使用?
    答:用 win,linux 通用的 powershell,并使用$global:abc=1

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

    ps 第 14 课:变量的作用域
    我在我写的课程里,有详细讲。
    powershell 脚尊神殿。群=183173532 。入群索要教程。
    sunziren
        17
    sunziren  
       Apr 2, 2020
    嗯,学到了学到了。
    css3
        18
    css3  
    OP
       Apr 2, 2020
    @sunziren 卧槽,你这头像😁
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1045 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 22:39 · PVG 06:39 · LAX 15:39 · JFK 18:39
    ♥ Do have faith in what you're doing.