V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
DongDongXie
V2EX  ›  Linux

新手问个很简单的 Linux 数组读取问题

  •  
  •   DongDongXie · 2018-10-14 02:26:55 +08:00 · 2425 次点击
    这是一个创建于 2237 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 这种,没搞懂是为什么,求教!!!

    9 条回复    2018-10-14 21:41:06 +08:00
    Allianzcortex
        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))` 将结果作为一个变量来强制计算求和
    iwtbauh
        2
    iwtbauh  
       2018-10-14 09:06:42 +08:00 via Android
    建议标题改为“新手问个很简单的 bash 数组读取问题",此问题和 Linux 无关。bash 可以运行在多种操作系统上,比如 BSD 的衍生版本和 Windows
    Vicer
        3
    Vicer  
       2018-10-14 09:41:55 +08:00 via Android
    echo $[$i+1]
    ik
        4
    ik  
       2018-10-14 09:41:56 +08:00 via Android
    上面已经回答了, echo $((i+1))
    ps1aniuge
        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 交流群
    个人学习 免费。
    公司学习 可以收取少许费用,群内远程帮你公司代培训员工。
    OpenJerry
        6
    OpenJerry  
       2018-10-14 14:05:36 +08:00 via Android
    @ps1aniuge 长文翻到最后必有推广定律?
    owt5008137
        7
    owt5008137  
       2018-10-14 14:25:05 +08:00 via Android
    echo 那一行改成 echo $(($i+1))
    siteshen
        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
    siteshen
        9
    siteshen  
       2018-10-14 21:41:06 +08:00
    @siteshen `cat (1|2).sh` `sh -x (1|2).sh` 后有换行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:43 · PVG 22:43 · LAX 06:43 · JFK 09:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.