使用-ash在字符串中的特定单词后捕获单词

时间:2012-12-07 11:03:24

标签: string shell word busybox ash

get_channel()
{
    local wifidev="$1"

    set -- $( iw dev "$wifidev" info )
    # e.g. 'Interface wlan0 ifindex 6 wdev 0x2 addr 10:6f:3f:0e:31:8e type IBSS wiphy 0 channel 11 (2462 MHz) NO HT'

    case "$@" in
        *" channel "*)
            while [ "$1" != "channel" ]; do shift; done
            echo "$2"
        ;;
        *)
            return 1
        ;;
    esac
}

看起来很复杂。我希望在“频道”之后加上数字, 没有sed或awk。是否可能有便携式8-)支撑扩展 只需要在“频道”之后加上这个词,例如:

channel="${@#*channel }"
set -- $channel
echo $1

也许还有更好的方法?

编辑:建议我们现在使用这种方法:

set -- $( iw dev "$dev" info )
mychan="$@"
mychan="${mychan#*channel }"
case "$mychan" in
    [0-9]*)
        echo "${mychan%% *}"
    ;;
esac

它足够快速和安全(+便携式) - 但也许有一个很好的?

1 个答案:

答案 0 :(得分:0)

这似乎没有做任何事情:

${@#* channel }

我猜特殊参数$ @太特殊了。

首先将位置参数存储在tmp变量中

local tmp="$*"
tmp=${tmp#* channel }
if [ "$tmp" = "$*" ]; then
    # no "channel" here
    return 1
fi
echo ${tmp%% *}