Shell 多个数组循环输出问题
有一段垃圾代码如下,怎么不用case的方式实现同样的功能?就是使用变量来循环输出对应的数组.
我尝试使用for i in ${arr_$flag[@]} 这种样式,可是会报错误:坏的替换.
arr_A=(1 2) arr_B=(3 4) arr_C=(3 4 5) tmp="A B C" for char in $tmp do case $char in 'A') for i in ${arr_A[@]} do echo $i done;; 'B') for i in ${arr_B[@]} do echo $i done ;; 'C') for i in ${arr_C[@]} do echo $i done ;; esac; done
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
${!var} 这个用法很神奇,网上查了下,找到一处解释:
参数扩展的基本形式是 “${PARAMETER}”。“PARAMETER” 的值是要被替换的。当 “PARAMETER” 是一个含有多于一个数字的位置参数的时候,需要使用括号,或者当 “PARAMETER” 后接一个不会被解释成它名字一部分的字符的时候。
如果 “PARAMETER” 的第一个字符是一感叹号,Bash使用 uses the value of the variable formed from the rest of “PARAMETER” as the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, rather than the value of “PARAMETER” itself. 这就是所谓的 indirect expansion.
原文网址:http://savs.hcc.edu.tw/~chuavv/bash/Bash-Beginners-Guide-SimplifiedChinese/ch03s04.html
${!var} 这个用法很神奇,网上查了下,找到一处解释:
参数扩展的基本形式是 “${PARAMETER}”。“PARAMETER” 的值是要被替换的。当 “PARAMETER” 是一个含有多于一个数字的位置参数的时候,需要使用括号,或者当 “PARAMETER” 后接一个不会被解释成它名字一部分的字符的时候。
如果 “PARAMETER” 的第一个字符是一感叹号,Bash使用 uses the value of the variable formed from the rest of “PARAMETER” as the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, rather than the value of “PARAMETER” itself. 这就是所谓的 indirect expansion.
原文网址:http://savs.hcc.edu.tw/~chuavv/bash/Bash-Beginners-Guide-SimplifiedChinese/ch03s04.html
引用来自“痞子汤”的答案