unix 如何在当前脚本中修改来自另一个脚本的变量中的变量值

lmyy7pcs  于 2023-10-18  发布在  Unix
关注(0)|答案(2)|浏览(183)

我有两个bash脚本a.sh

#!/bin/bash
d="printing from a.sh ${c}"
export d

b.sh

#!/bin/bash
c="yourtab"
echo ${d}

我正在通过采购a.sh来运行b.sh

source a.sh && sh b.sh

下面是输出

printing from a.sh

但我希望输出如下

printing from a.sh yourtab

请建议如何实现这一点。
既然有人问我为什么要这样做,我想给予我为什么要这样做的实际情况。下面是场景和相应的代码。
我在esh.sh中定义了一个电子邮件函数email(),它存在于文件夹邮件中,取值为eto,ecc,esub。
我在env.sh中创建变量mto,mcc,msub
我有一个mains.sh,在这里我调用email函数
env.sh如下所示

source mails/esh.sh
export -f email

export MTO="[email protected]"
export MCC="[email protected]"
export MSUB="this is the subject for running ${job} today"

mains.sh如下所示

job="First Job"

eto=${MTO}
ecc=${MCC}
esub=${MSUB}

email -t eto -c ecc -s esub

我在获取env.sh后运行mains.sh,如下所示

source env.sh && sh mains.sh

当我运行上面的代码时,我得到的主题是this is the subject for running today
但我希望主题是this is the subject for running First Job today
希望我说清楚了。

q5lcpyga

q5lcpyga1#

试试这样做:

$ cat a
#!/bin/bash
d="printing from a.sh %s"
export d

$ cat b
#!/bin/bash
c="yourtab"
printf "$d" "$c"

结果

$ . a; ./b
printing from a.sh yourtab
o7jaxewo

o7jaxewo2#

d的值是在执行d="printing from a.sh ${c}"行时分配的,即当你运行a.sh时,它将使用c * 的值。
如果您稍后设置或修改c的值,d的值将不会更改。
你可以用一个函数来实现请求的输出。
文件a.sh

#!/bin/bash

message1()
{
    echo "printing from a.sh ${c}"
}

# or

message2()
{
    echo "printing from a.sh $*"
}

export -f message1 message2

b.sh

#!/bin/bash

c="yourtab"
message1

# or

message2 foo bar baz

测试结果:

source a.sh && ./b.sh
printing from a.sh yourtab
printing from a.sh foo bar baz

请注意,导出函数是一个bash扩展。

相关问题