gpt4 book ai didi

Bash on macOS - 获取给定年份每个星期六的日期列表

转载 作者:行者123 更新时间:2023-11-29 09:11:40 27 4
gpt4 key购买 nike

macOS 上的 bash 中,我想编写一个带有 dates 的小脚本(或任何其他可以执行的程序),它给出给定年份的每个星期六的格式为 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

但是,上面的命令没有在数组 list 中写入任何内容,尽管它通过 tee 为我提供了正确的输出。

我该如何解决这些问题?

最佳答案

修改 Dennis Williamson's answer稍微满足您的要求并将结果添加到数组中。适用于 GNU date 而不是 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 '%s\n' "${array[@]}"

要在 MacOS 上设置 GNU date,您需要执行 brew install coreutils 并以 gdate 访问命令以将其与提供原生版本。

关于Bash on macOS - 获取给定年份每个星期六的日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com