如何从shell脚本返回特定变量的值?

时间:2014-02-11 10:59:49

标签: linux bash shell unix

我有两个sh文件,它们是“main.sh”和“sub.sh”我想在“sub.sh”中返回一个变量的值并在main.sh中使用它。有这么多“ echo“命令所以我不能只返回sub.sh文件中的值。我只需要一个变量的值。怎么可能呢?

main.sh

echo "start"

//how to get a variable from the sh below?
//dene=$(/root/sub.sh)

echo "finish"

sub.sh

echo "sub function"
 a="get me out of there"  // i want to return that variable from script
echo "12345"
echo  "kdsjfkjs"

3 个答案:

答案 0 :(得分:3)

要“发送”变量,请执行以下操作:

echo MAGIC: $a

要“接收”它:

dene=$(./sub.sh | sed -n 's/^MAGIC: //p')

这样做是为了丢弃所有不以MAGIC开头的行:并在找到匹配项后在该标记之后打印该部分。你可以用你自己的特殊词代替MAGIC。

编辑:或者您可以通过“源”子脚本来完成。那就是:

source sub.sh
dene=$a

这样做的目的是在sub.sh的上下文中运行main.sh,好像文本刚刚被复制粘贴一样。然后您可以访问变量等等。

答案 1 :(得分:1)

main.sh

#!/bin/sh

echo "start"

# Optionally > /dev/null to suppress output of script
source /root/sub.sh

# Check if variable a is defined and contains sth. and print it if it does
if [ -n "${a}" ]; then
    # Do whatever you want with a at this point
    echo $a
fi

echo "finish"

sub.sh

#!/bin/sh

echo "sub function"
a="get me out of there"
echo "12345"
echo -e "kdsjfkjs"
exit 42

答案 2 :(得分:1)

您可以将变量导出到sub.sh中的shell会话,稍后在main.sh中将其捕获。

sub.sh
#!/usr/bin/sh
export VARIABLE="BLABLABLA"


main.sh
#!/bin/sh
. ./sub.sh
echo $VARIABLE