【问题标题】:To get the value of a variable from shellscript从 shell 脚本中获取变量的值
【发布时间】:2013-06-15 17:18:30
【问题描述】:

我正在创建一些 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
 ....
....
....
}

如何获取 var 的值从script1script2

【问题讨论】:

    标签: linux shell unix aix


    【解决方案1】:

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

    一般来说,如果您想将脚本打印的文本存储到标准输出,请使用varname=$(command arguments)

    【讨论】:

    • 谢谢你,我会考虑的,但是你知道我的查询的解决方案是什么
    【解决方案2】:

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

    【讨论】:

    • 我已经编辑了上面的代码,知道它是 script1 的 method1 和 script3 的 methodA。你能举例说明如何获取script1和script2
    • 正如我在回答中所写的那样:将 ./script1 更改为 source script1
    • 但是我怎样才能得到 var 从'script1'到'script2'的值
    • 致电method1。设置var
    • 你能举个例子吗?我是shell脚本新手
    【解决方案3】:

    正如 l0b0 所说,在方法 A 中,您不仅可以使用 ./script1,还可以:

    foo=$( ./script1 )
    

    如果 script1 的输出包含空格,您可能需要在其周围加上引号:

    foo="$( ./script1 )"
    

    另外,为了安全起见,在 method1 之外声明 foo 使其是全局的(这是默认设置,但总是很高兴看到声明的内容。所以,在 script3 的顶部执行:

    typeset foo
    

    如果您可以将 script1 和 script2 合并到 script3 中,这将更快并且可能更易于维护,但您仍然需要多次使用 $( ... ) 构造。在过去,这用于回抽:

    foo=` ./script1 `
    

    仍然支持该语法。

    【讨论】:

      猜你喜欢
      • 2020-09-05
      • 2022-11-05
      • 2013-03-25
      • 2015-05-27
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多