在macOS上进行Bash – 获取给定年份每个星期六的日期列表
发布时间:2020-12-15 21:26:59 所属栏目:安全 来源:网络整理
导读:在macOS上的bash中,我想写一个带有日期(或任何其他程序)的小脚本,它给出了一个给定年份每个星期六yyyymmdd格式的日期列表,并将其保存到变量中. 例如,如果我想要一个1850年所有星期六的日期列表,它应该看起来像这样: var = [ 18500105,18500112,18500119,…,
在macOS上的bash中,我想写一个带有日期(或任何其他程序)的小脚本,它给出了一个给定年份每个星期六yyyymmdd格式的日期列表,并将其保存到变量中.
例如,如果我想要一个1850年所有星期六的日期列表,它应该看起来像这样: var = [ 18500105,18500112,18500119,…,18501228 ] 使用以下代码: list=() for month in `seq -w 1 12`; do for day in `seq -w 1 31`; do list=( $(gdate -d "1850$month$day" '+%A %Y%m%d' | grep 'Saturday' | egrep -o '[[:digit:]]{4}[[:digit:]]{2}[[:digit:]]{2}' | tee /dev/tty) ) done done 但是,上面的命令不会在数组列表中写入任何内容,尽管它通过tee为我提供了正确的输出. 我该如何解决这些问题? 解决方法
稍微修改
Dennis Williamson’s answer以满足您的要求并将结果添加到阵列中.适用于GNU日期,而不适用于FreeBSD的版本.
#!/usr/bin/env bash y=1850 for d in {0..6} do # Identify the first day of the year that is a Saturday and break out of # the loop if (( $(date -d "$y-1-1 + $d day" '+%u') == 6)) then break fi done array=() # Loop until the last day of the year,increment 7 days at a # time and append the results to the array for ((w = d; w <= $(date -d "$y-12-31" '+%j'); w += 7)) do array+=( $(date -d "$y-1-1 + $w day" '+%Y%m%d') ) done 现在您可以将结果打印为 printf '%sn' "${array[@]}" 要在MacOS上设置GNU日期,您需要执行brew install coreutils并以gdate身份访问命令,以区别于提供的本机版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |