是否可以使用$ date +%u来计算特定日期的星期几?我将在预测估算中使用这一行。
例如:
DOW=Monday
day_no=`date "$DOW" +%u` # Should output 1
echo "$DOW is $day_no"
或者我应该使用if或case方法:
if [ "$DOW" == "Monday" ]
then
day_no=1
elif [.....]
then
....
第一种方法是3行,if或case方法是20行。
我正在使用Bash。
答案 0 :(得分:1)
如果您将$DOW
传递给-d
标记,该标记会显示格式化时间的说明,它会为您提供所需内容:
day_no=$(date -d "$DOW" +%u)
请注意,这会将1分配给星期一,7分配给星期日。
答案 1 :(得分:0)
实现这一目标的方法很多。
如果您想使用特定于bash的内容,我建议使用数组。在bash 4中,可以使用关联数组,如下所示:
declare -A days='([Monday]="1" [Tuesday]="2" etc...)'
DOW="Monday"
day_no=${days[$DOW]}
如果您在bash 3中(例如在OSX中),则可能需要浏览非关联数组。
declare -a days='([1]="Monday" [2]="Tuesday" etc...)'
DOW="Monday"
for _ in "${!days[@]}"; do
if [ "${days[$_]}" = "$DOW" ]; then
day_no=$_
break
fi
done
如果您想使用date
命令处理此问题,了解您正在使用的平台非常重要,因为date
在不同的操作系统中表现不同。以下内容可能对您有用:
case $(uname -s) in
Linux) day_no=$(date -d "$DOW" '+%u') ;;
*BSD|Darwin) day_no=$(date -j -f '%A' "$DOW" '+%u') ;;
*)
echo "ERROR: I don't know how to do this in $(uname -s)." >&2
exit 1
;;
esac
请注意,其中一个基于阵列的解决方案可能比涉及调用外部程序(date
)的解决方案更快。