将命令的输出分配给变量

 g37112969 发布于 2023-02-09 10:24

我是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.请帮助.

3 个回答
  • 尝试:

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

    包装命令会$( )告诉shell运行该命令,而不是尝试将命令本身设置为名为"output"的变量.(注意你也可以使用反引号`命令`.)

    我强烈推荐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
    

    2023-02-09 10:27 回答
  • 您可以使用如下$符号:

    OUTPUT=$(expression)
    

    2023-02-09 10:27 回答
  • 如果你想用multiline/multiple命令执行它,那么你可以这样做:

    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
    

    2023-02-09 10:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有