为什么将它设置为变量后只运行一次而不是两次?重击

时间:2019-03-22 00:07:42

标签: bash shell

我有这样的东西...

我有三个文件。 两个包含相同变量但值不同的文件,以及第三个将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 个答案:

答案 0 :(得分:3)

此:

MyASyncClass.AsyncResponse response = new MyASyncClass.AsyncResponse() {
        @Override
        public void processFinish(String output) {
           // do something with the output.
        }
    };

表示“运行命令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[@]}" 设置为包含RUN_COMMANDSsource array ,然后将该数组作为命令运行(等同于运行命令{ {1}}。

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

db/commands.sh