Bash 如何使用日期+;%u用给定的一天来查找星期几的数字
是否有方法使用$date+%u计算特定给定日期的星期几?我将在预测估计中使用这条线 例如:Bash 如何使用日期+;%u用给定的一天来查找星期几的数字,bash,date,Bash,Date,是否有方法使用$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+行 我正在使用B
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。如果您将
$DOW
传递给-d
标志,该标志读取要格式化的时间描述,它将为您提供所需的:
day_no=$(date -d "$DOW" +%u)
请注意,这会将1分配到星期一,7分配到星期天。实现这一点的方法很多 如果您想使用特定于bash的东西,我建议使用数组。在bash 4中,可以像这样使用关联数组:
declare -A days='([Monday]="1" [Tuesday]="2" etc...)'
DOW="Monday"
day_no=${days[$DOW]}
如果您在Bash3中(例如在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
)的解决方案速度更快。这在Linux中有效,但在OSX或FreeBSD中无效。OP没有提到他的操作系统——重要的是要提供可移植的答案。