首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash脚本中区分2和02

在bash脚本中区分2和02
EN

Stack Overflow用户
提问于 2011-02-09 08:32:50
回答 2查看 4.9K关注 0票数 2

我有一个bash脚本,它将日期、月份和年份作为单独的参数。使用该方法,将构造一个url,然后使用wget获取内容并将其存储在html文件(例如t.html)中。现在,用户可以输入一个2位数的月份/日期(如02而不是2,反之亦然)。如何区分上述两种格式,并从脚本中纠正这一点?

网址的工作如下:

Date:需要2位数字的输入。因此,一个7必须作为07提供的url要正确地构建。在这里,我正在寻找一张支票,如果它小于10,并且前面还没有零,它会在日期后面附加一个零。因此,在构建url之前,日期字段的7应该变为07。

月份:需要2位数字的输入,但在这里,url会自动附加0,以防月份小于10。因此,如果用户输入2,则url表单02,但如果用户输入02,url表单002。在这里,可能需要追加或删除0。

P.S:我知道这个方法是按照url s*c&s,但我只需要使用它。

谢谢,

斯里拉姆

EN

回答 2

Stack Overflow用户

发布于 2011-02-09 10:17:10

只需使用printf

例如,$(printf "%02d" $day)在情况下添加前导零。

$(printf "%1d" $month)来取零以防万一。

票数 2
EN

Stack Overflow用户

发布于 2011-02-09 11:20:58

若要删除所有前导零,不论数字和最终数字的数目(例如,它修正了"010“):

代码语言:javascript
运行
复制
shopt -s extglob
month=009
month=${month##+(0)}
echo "$month"

演示:

代码语言:javascript
运行
复制
$ for a in 2 02 002 0002 20 020 00200; do echo ${a##+(0)}; done
2
2
2
2
20
20
200

确定任何日期:

代码语言:javascript
运行
复制
shopt -s extglob
fixdigits () {
    if (( ${#1} > 2 || ${#1} < 1 ))
    then
        echo "Invalid number of digits"
        return 1
    fi
    printf '%.2d\n' 0${1##+(0)}
}

演示:

代码语言:javascript
运行
复制
$ for a in 2 02 002 0002 20 020 00200; do fixdigits $a; done
02
02
Invalid number of digits
Invalid number of digits
02
Invalid number of digits
Invalid number of digits

另一种选择是:

代码语言:javascript
运行
复制
shopt -s extglob
fixdigits () {
    digits=${1##+(0)}
    if (( ${#digits} > 2 || ${#digits} < 1 ))
    then
        echo "Invalid number of digits"
        return 1
    fi
    printf '%.2s\n' 0$digits
}

演示:

代码语言:javascript
运行
复制
$ for a in 2 02 002 0002 20 020 00200; do fixdigits $a; done
02
02
02
02
02
02
Invalid number of digits
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4942729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档