【问题标题】:bash while loop not cooperating?bash while循环不合作?
【发布时间】:2020-08-19 05:12:07
【问题描述】:

我正在学习编写脚本并创建了edit.sh来制作一个简单的while循环,如下所示

#!/bin/sh

a=0 

while [ $a -lt 10 ] 
do
echo $a
a='expr $a + 1'
done

我在谷歌上搜索过这个问题,大部分时间是间距问题....但我已经检查并重新编写了大约 10 次代码,我总是得到

./edit.sh:第 5 行:[:参数太多。

我一生都无法弄清楚我做错了什么,它可能真的很愚蠢,我只是看不到它,任何帮助都非常重要。谢谢!

【问题讨论】:

    标签: bash while-loop sh


    【解决方案1】:

    在编写代码时,您将在第一次迭代时将文字字符串 expr $a + 1 分配给名称 a,而不是命令 expr 0 + 1 的结果。未引用$a,然后尝试执行命令[ expr $a + 1 -lt 10 ],它确实有太多参数。

    直接的问题是您将反引号误认为是单引号;你打算写

    a=`expr $a + 1`
    

    但是,几乎不应该使用反引号,而是使用$(...) 构造来进行命令替换。

    a=$(expr $a + 1)
    

    然而,在 POSIX 兼容的 shell 中不需要使用 expr 命令进行算术运算。请改用$((...))

    a=$((a + 1))
    

    【讨论】:

    • 哇,谢谢!我不知道,我刚刚学习这种语法,我看的视频是按照我的方式做的,我正在拔头发,逐个字符检查我做错了什么,哈哈。谢谢!
    • ((a++))while.. 替换为for ((a=0; a<10; a++)); do
    • 鉴于 sh 标签,我在 POSIX 兼容性方面犯了错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2017-04-26
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2013-06-13
    相关资源
    最近更新 更多