-1
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

それは十分に高速で安全です(+ポータブル)-しかし、おそらく素晴らしいものさえありますか?

4

1 に答える 1

0

これは何もしないようです:

${@#* channel }

特別なパラメータ $@ は特別すぎると思います。

最初に位置パラメータを tmp 変数に格納します

local tmp="$*"
tmp=${tmp#* channel }
if [ "$tmp" = "$*" ]; then
    # no "channel" here
    return 1
fi
echo ${tmp%% *}
于 2012-12-07T13:25:13.800 に答える