为什么shell中的这些字符串操作不起作用?

时间:2017-10-17 03:01:25

标签: shell

我想在字符串中得到一个特定的单词,所以我的代码是这样的:

#!/bin/env bash
str="ovsdb-server is running with pid 28663 ovs-vswitchdm is running with pid 29121 ovs-vswitchd is running with pid 28679"
str2=$(echo $str)
res=${str2##ovs-vswitchd}
echo $res
pos=$(expr index "$str" "ovs-vswitchd")
echo $pos

但结果是:

ovsdb-server is running with pid 28663 ovs-vswitchdm is running with pid 29121 ovs-vswitchd is running with pid 28679
1

我不知道为什么。在我看来,我想得到“正在运行pid 28679 ”,然后得到 28679 ,但我不知道为什么对字符串的操作不起作用,请帮帮我......

1 个答案:

答案 0 :(得分:0)

代码大部分是正确的,除了几位:

  1. 删除最长的匹配前缀模式 ##需要*以匹配$str2 字符串前的字符" OVS-vswitchd "

    变化:

    res=${str2##ovs-vswitchd}

    res=${str2##*ovs-vswitchd}

  2. expr index返回的数字不会超过字符串的长度,也不会返回子字符串。

    变化:

    pos=$(expr index "$str" "ovs-vswitchd")

    pos=${res##*pid }

  3. 输出:

    is running with pid 28679
    28679