linux - 使用ash shell "for x in y"

标签 linux for-loop ash

首先,我使用的系统上没有安装 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/

相关文章:

c++ - 如何在具有 <500 MHz 时钟、<256 MiB RAM 并使用基于 Yoctominimal 的自定义 Linux 的单核机器上优化事件轮询线程

当年份是两位数时,python从字符串中断转换日期

java - 错误地使用for循环

for-loop - vhdl "for loop",步长不等于 1

regex - 当模式包含 "["时,字符串替换不起作用

linux - 参数后文件名的 Bash Tab 补全

c - FIFO channel 读取不正确

r - 要替换的项目数不是替换长度的倍数”——循环中的区域函数

linux - 无法在 busybox sh 中将 0 填充数字增加到 8

shell - openwrt中的无限循环脚本?