如何让bash变量在awk管道上运行

 痛苦逝去你的样子 发布于 2022-12-20 15:23

我无法从我的bash脚本中获取变量来处理awk管道.

SERVER_PORT="27018"
...
HOLDER=`netstat -tlpn | awk -v sp=$SERVER_PORT '/:sp */ {split($NF,a,"/"); print a[1]}'`

执行此变量的命令后,下一个等式为TRUE!

...
if [ "$HOLDER" == "" ]; then
...

如果我跑

netstat -tlpn | awk '/:27018 */ {split($NF,a,"/"); print a[1]}'

在我的shell窗口一切都很好,它给了我进程的PID.

所以我的问题是:如何正确地将变量传递给awk或者某些东西已经坏了?运行CentOS 7

1 个回答
  • 在正则表达式中,常量awk不会扩展变量.所以/:sp */是名副其实/:sp */.

    你需要使匹配成为一个字符串: $0 ~ ":"sp" *"

    awk脚本由pattern {action}成对组成./:27018 */是一种模式(使用正则表达式常量).正如我在开头所说,awk不会 regexp常量扩展变量,因此/:sp */匹配这些文字字符.

    除了正则表达式常量之外,还有其他模式可能.即使是静态字符串也可以是模式(它们总是正确但它们有效).

    ~是awk中的正则表达式匹配运算符.您可以使用它来手动执行与正则表达式常量模式相同的匹配类型.~需要两个字符串参数.

    把它放在一起我们可以~将整个line($0)与":"sp" *"(字符串":",我们的变量sp和字符串" *")的字符串常量正则表达式(而不是正则表达式常量)匹配().

    当它放在一起时,会将你(如上所述)$0 ~ ":"sp" *"作为模式而不是正则表达式常量.

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