从shell脚本获取变量的值

时间:2013-06-19 08:44:26

标签: linux shell unix aix

我正在创建一些shell脚本。 script1在method1中有一个if条件 对于前 -

script1
method1()
{
 if [[somecondition]]
 then
     var=y
 else
     var=n
 fi
}
method2
....

....

我想在script2

中获得var的值
script2
methodx()
{
 foo=$var
 if [[ $foo = [Yy] ]]
 then
     .....
     .....
 elif [[ $foo = [Nn] ]]
 then
     .....
     .....
 else
     .....
 fi
}

这个脚本都在另一个脚本中执行

script3

methodA()
{
./script1
....
....
....
}

methodB()
{
 ./script2
 ....
....
....
}

如何从script1script2

获取var的值

3 个答案:

答案 0 :(得分:0)

[[]]内总是需要空格。另外,要测试模式,您可以使用[[ $foo =~ [Nn] ]]

通常,如果要将脚本打印的文本存储到标准输出,请使用varname=$(command arguments)

答案 1 :(得分:0)

看起来你需要来自script1的method1和来自script2的methodx才能在script3的shell中定义。为此,在script3中,您需要source script1source script2,而不是执行它们。要完成那个,您可能需要稍微重构一下代码,因为我看到在script1和script3中都定义了method1。

答案 2 :(得分:0)

正如l0b0所说,在methodA中,而不仅仅是./script1,你可以这样做:

foo=$( ./script1 )

如果script1的输出有空格,你可能想在它周围加上引号:

foo="$( ./script1 )"

另外,为了安全起见,在method1之外声明foo,因此它是全局的(这是默认的,但总是很高兴看到声明的东西。所以,在script3的顶部做:

typeset foo

如果你可以将script1和script2合并到script3中,那么速度更快,可能更容易维护,但仍有很多次需要使用$(...)构造。在过去,这用于回归抽搐:

foo=` ./script1 `

仍支持该语法。