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