代码之家  ›  专栏  ›  技术社区  ›  Tsuna

为什么在将它作为变量后只运行一次而不是两次?猛击

  •  0
  • Tsuna  · 技术社区  · 5 年前

    我有这样的东西。。。

    我有三份档案。 包含相同变量但值不同的两个文件和执行以下命令的第三个文件 cd

    我的第三个文件叫做 init.sh 看起来像

    ###############
    # works perfectly if I do it this way
    source db/abc.sh  # changes variable
    source db/commands.sh
    
    source db/def.sh  # changes variable
    source db/commands.sh
    
    
    ###############
    # does not work
    RUN_COMMANDS=$(source db/commands.sh)
    
    source db/1107556.sh  # changes variable
    ${RUN_COMMANDS}  # this does not run
    
    source db/kunyuan.sh # changes variable
    ${RUN_COMMANDS}  # this runs
    

    我这样做的原因是,我可以改变变量,然后运行相同的命令,因为命令是相同的,但只是变量的不同值。

    希望我没有做任何愚蠢的事情来思考这种使用bash的方式。

    提前感谢您的帮助或建议。

    1 回复  |  直到 5 年前
        1
  •  3
  •   ruakh    5 年前

    这是:

    RUN_COMMANDS=$(source db/commands.sh)
    

    意思是“运行命令 source db/commands.sh ,并将其输出(=打印到标准输出的所有内容)存储在变量中 RUN_COMMANDS ".

    相反,你似乎想要:

    RUN_COMMANDS=(source db/commands.sh)     # note -- no '$'
    
    source db/1107556.sh
    "${RUN_COMMANDS[@]}"
    
    source db/kunyuan.sh
    "${RUN_COMMANDS[@]}"
    

    哪一套 运行\u命令 数组 source db/commands.sh 源数据库/commands.sh

    也就是说,您可能需要考虑编写一个shell函数:

    function run-db-commands() {
        source "$1" && source db/commands.sh
    }
    
    run-db-commands db/1107556.sh
    run-db-commands db/kunyuan.sh