0

首先,我使用的系统上没有安装 bash。所以,请不要基于 bash 的答案。Ash 不if使用正则表达式。

在 ash shell 脚本中,我有一个可接受的响应列表:

# NB:  IFS = the default IFS = <space><tab><newline>
# 802.11 channel names
channels="1 2 3 4 5 5u 6 7 7u 8 8u 9 9u 10 10u 11 11u 2l 36 3l 40 40u 44 48
48u 4l 52 56 56u 5l 60 61 64 64u 7l 100 104 104u 108 112
112u 116 132 136 136u 140 144 144u 149 153 153u 157 161 161u 165 36l
44l 52l 60l 100l 108l 132l 140l 149l 157l 36/80 40/80 44/80 48/80 52/80 56/80 60/80
64/80 100/80 104/80 108/80 112/80 132/80 136/80 140/80 144/80 149/80 153/80 157/80 161/80"

一个菜单例程返回了“MENU_response”,其中包含一个可能匹配的响应,我想看看我是否得到了一个有效的响应。

for t in "$channels"; do
   echo "B     MENU_response = \"${MENU_response}\"      test = \"${t}\""
   if [ "${MENU_response}" = "${t}" ]; then
        break 
   fi
done

循环中的回声正在重新发布$t= all of $channels,这是没有意义的。我已经在其他几个地方使用过这种技术,并且效果很好。

有人能告诉我为什么会这样吗?我需要在每个人周围加上引号channel吗?

4

1 回答 1

2

删除周围的引号"$channels"对我有用:

$ channels="1 2 3 4 5 5u 6 7 7u 8 8u 9 9u 10 10u 11 11u 2l 36 3l 40 40u 44 48
> 48u 4l 52 56 56u 5l 60 61 64 64u 7l 100 104 104u 108 112
> 112u 116 132 136 136u 140 144 144u 149 153 153u 157 161 161u 165 36l
> 44l 52l 60l 100l 108l 132l 140l 149l 157l 36/80 40/80 44/80 48/80 52/80 56/80 60/80
> 64/80 100/80 104/80 108/80 112/80 132/80 136/80 140/80 144/80 149/80 153/80 157/80 161/80"
$ for t in $channels; do echo $t; done
1
2
3
4
5 
# etc.
于 2014-04-30T14:35:05.267 回答