【问题标题】:Assigning the output of a command to a variable [duplicate]将命令的输出分配给变量[重复]
【发布时间】:2014-01-08 10:13:43
【问题描述】:

我是 unix 新手,正在编写一个 shell 脚本。

当我在命令提示符下运行此行时,它会打印匹配的进程总数:

ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'

例如,上述行的输出在命令提示符下是 2。

我想写一个shell脚本,将上面第(2)行的输出赋值给一个变量,稍后在if语句中用于比较。

我正在寻找类似的东西

output= `ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'`
echo $output

但是当我运行它时,它说找不到输出,而我期待 2。请帮助。

【问题讨论】:

标签: bash unix sh


【解决方案1】:

您可以使用$ 符号,例如:

OUTPUT=$(expression)

【讨论】:

    【解决方案2】:

    如果您想使用多行/多个命令/s 来执行此操作,那么您可以这样做:

    output=$( bash <<EOF
    #multiline/multiple command/s
    EOF
    )
    

    或者:

    output=$(
    #multiline/multiple command/s
    )
    

    例子:

    #!/bin/bash
    output="$( bash <<EOF
    echo first
    echo second
    echo third
    EOF
    )"
    echo "$output"
    

    输出:

    first
    second
    third
    

    【讨论】:

      【解决方案3】:

      试试:

      output=$(ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'); echo $output
      

      将您的命令包装在$( ) 中会告诉shell 运行该命令,而不是尝试将命令本身设置为名为“输出”的变量。 (请注意,您也可以使用反引号 `command`。)

      我强烈推荐http://tldp.org/LDP/abs/html/commandsub.html 了解有关命令替换的更多信息。

      另外,正如 1_CR 在评论中正确指出的那样,等号和赋值之间的额外空格导致它失败。这是我机器上您遇到的行为的一个简单示例:

      jed@MBP:~$ foo=$(ps -ef |head -1);echo $foo
      UID PID PPID C STIME TTY TIME CMD
      
      jed@MBP:~$ foo= $(ps -ef |head -1);echo $foo
      -bash: UID: command not found
      UID PID PPID C STIME TTY TIME CMD
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-08
        • 1970-01-01
        • 2012-02-23
        • 2012-07-16
        • 2017-09-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        相关资源
        最近更新 更多