Bash 连接奇怪的输出?

Bash concatenate wierd output?

我正在尝试将 IP 字符串与 RegExp 的其余部分连接起来,以用于稍后的命令。这是代码:

    ip=$(grep -oP 'server-ip=\K(.*)' server.properties)
    echo "Server IP: ${ip}"
    ip=${ip//\./\\.}
    exp=':19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'
    regexp="${ip}$exp"
    echo "netstat -tulpn | grep -oP '${regexp}'"
    #pid=$(netstat -tulpn | grep -oP '${regexp}')

$ip 的值是一个有效的 IP 字符串。然后它用 \ 转义了 .(例如 127.0.0.1)

然后我尝试将 $ip 值与 $exp 连接起来。对于

的预期输出
    127\.0\.0\.1:19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)

然而,我得到的却是

    :19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)\.0\.1

我是 Bash 的新手,所以我认为这很简单,但有什么帮助吗?

谢谢

我还没有足够的声誉来发表评论,但是在测试脚本中使用您的代码明确设置 ip 可以获得预期的输出。如果在你的盒子上修改它有效,那么我怀疑问题出在你的 grep 获取 IP 上。

~$ cat test2.sh
    ip=127.0.0.1
    echo "Server IP: ${ip}"
    ip=${ip//\./\\.}
    exp=':19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'
    regexp="${ip}$exp"
    echo "netstat -tulpn | grep -oP '${regexp}'"

~$ ./test2.sh
    Server IP: 127.0.0.1
    netstat -tulpn | grep -oP '127\.0\.0\.1:19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'

事实上,创建一个如下所示的 server.properties:

~$ cat server.properties
   server-ip=127.0.0.1

那么 运行 您的脚本似乎可以正常工作。问题似乎在于获取该值的某个地方:

~$ cat ./test2.sh
    ip=$(grep -oP 'server-ip=\K(.*)' server.properties)
    echo "Server IP: ${ip}"
    ip=${ip//\./\\.}
    exp=':19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'
    regexp="${ip}$exp"
    echo "netstat -tulpn | grep -oP '${regexp}'"
    #pid=$(netstat -tulpn | grep -oP '${regexp}')

~$ ./test2.sh
    Server IP: 127.0.0.1
    netstat -tulpn | grep -oP '127\.0\.0\.1:19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'