我正在创建一些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
....
....
....
}
如何从script1
到script2
答案 0 :(得分:0)
[[
和]]
内总是需要空格。另外,要测试模式,您可以使用[[ $foo =~ [Nn] ]]
。
通常,如果要将脚本打印的文本存储到标准输出,请使用varname=$(command arguments)
。
答案 1 :(得分:0)
看起来你需要来自script1的method1
和来自script2的methodx
才能在script3的shell中定义。为此,在script3中,您需要source script1
和source script2
,而不是执行它们。要完成那个,您可能需要稍微重构一下代码,因为我看到在script1和script3中都定义了method1。
答案 2 :(得分:0)
正如l0b0所说,在methodA中,而不仅仅是./script1,你可以这样做:
foo=$( ./script1 )
如果script1的输出有空格,你可能想在它周围加上引号:
foo="$( ./script1 )"
另外,为了安全起见,在method1之外声明foo,因此它是全局的(这是默认的,但总是很高兴看到声明的东西。所以,在script3的顶部做:
typeset foo
如果你可以将script1和script2合并到script3中,那么速度更快,可能更容易维护,但仍有很多次需要使用$(...)构造。在过去,这用于回归抽搐:
foo=` ./script1 `
仍支持该语法。