1 aa=(1 3 5 7)
2 for i in ${aa[@]}
3 do
4 echo ${i}+1
5 done
上面并不是打印出意料中的 2 4 6 8,打印的是 1+1 3+1 这种,没搞懂是为什么,求教!!!
1
Allianzcortex 2018-10-14 02:50:33 +08:00
因为 `> echo 1+2` 显示的结果就是 1+2,不会是 3
将第四行改为 `echo ${i}+1|bc`,bc 是 Linux command 下的 math 库 或者改为 `echo $((${i}+1))` 将结果作为一个变量来强制计算求和 |
2
iwtbauh 2018-10-14 09:06:42 +08:00 via Android
建议标题改为“新手问个很简单的 bash 数组读取问题",此问题和 Linux 无关。bash 可以运行在多种操作系统上,比如 BSD 的衍生版本和 Windows
|
3
Vicer 2018-10-14 09:41:55 +08:00 via Android
echo $[$i+1]
|
4
ik 2018-10-14 09:41:56 +08:00 via Android
上面已经回答了, echo $((i+1))
|
5
ps1aniuge 2018-10-14 13:13:44 +08:00
`echo $((${i}+1))` 的结果除以 9 得多少呢?
6/9 7/9 567 / 678 都得 0 ! 问:为什么不学 shell ? 答: 1shell 太老了。语法上有各种小小的问题。(例如:详见 shell 十三问的 for 篇) 2shell 不是面向对象的,功能不强。 3shell 的正则,学习曲线陡峭。复杂的正则,很容易出错。 实际上 ps 和 py 类似。都是用 [简单的对象方法] ,来实现 [复杂正则] 的功能。但是呢,shell 没有对象,也没有方法。 4 常用外部 shell 命令还是要学,要会的。 5java 在发展,jshell,java12 快出了。 .net 在发展,.net3 快出了。 python 在发展,py37 快完善了。 perl 不怎么发展,排名蹭蹭跌。 bash 和 shell 命令,基本不发展。shell 已经完美了么? shell 中连布尔型变量都没有。 问:如何看待 bash,及 linux shell 脚本将来的地位,命运? 问:powershell 在 linux 中的前景如何? 答: 就好像 [气泵射钉枪] 必将取代 [锤子] 一样,先进生产力必然代替落后的。 就好像面向对象的 powershell,必然取代面向字符的 bat 那样。 powershell 发展成熟后。以 bat,bash 为代表的,上一代面向字符串的脚本语言,面向字符串的命令,难免被边缘化。 过几年后,开机启动脚本,特简单的脚本中,或许还残留有 bat,bash,字符串命令的身影。 问:去哪学 linux 版的 powershell ? 答: QQ 群号=183173532 名称=powershell 交流群 个人学习 免费。 公司学习 可以收取少许费用,群内远程帮你公司代培训员工。 |
7
owt5008137 2018-10-14 14:25:05 +08:00 via Android
echo 那一行改成 echo $(($i+1))
|
8
siteshen 2018-10-14 21:37:35 +08:00
# 2.sh 错误
# 1.sh 正确 # https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script # 错误 $ cat 2.sh aa=(1 3 5 7) for i in ${aa[@]} do echo ${i}+1 done $ sh -x 2.sh + aa=(1 3 5 7) + for i in '${aa[@]}' + echo 1+1 1+1 + for i in '${aa[@]}' + echo 3+1 3+1 + for i in '${aa[@]}' + echo 5+1 5+1 + for i in '${aa[@]}' + echo 7+1 7+1 # 正确 $ cat 1.sh aa=(1 3 5 7); for i in ${aa[@]}; do echo $(expr ${i} + 1) done $ sh -x 1.sh + aa=(1 3 5 7) + for i in '${aa[@]}' ++ expr 1 + 1 + echo 2 2 + for i in '${aa[@]}' ++ expr 3 + 1 + echo 4 4 + for i in '${aa[@]}' ++ expr 5 + 1 + echo 6 6 + for i in '${aa[@]}' ++ expr 7 + 1 + echo 8 8 |