許多方法來實現這一點。
如果你想使用特定於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
)的解決方案更快。
這適用於Linux,但不適用於OSX或FreeBSD。 OP沒有提到他的操作系統 - 生成便攜式答案很重要。 – ghoti