首先,我使用的系统上没有安装 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
循环中的 echo 重新发布 $t
= all of $channels
,这是没有意义的。我在其他几个地方使用过这种技术,效果很好。
有人能告诉我为什么会这样吗?我是否需要在每个单独的 channel
周围加上引号?
最佳答案
删除 "$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.
关于linux - 使用ash shell "for x in y",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23390762/