我有两个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"
答案 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)
#!/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"
#!/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