如何在bash脚本中将日期转换为小写?

问题描述

我通常使用以下bash脚本以一周中的几天(例如,星期一,星期二,星期三,星期四,星期五,星期六和星期日)重命名文件

#get date
export LANG=id_ID
export TZ=Asia/Jakarta
DAY=$(date --date='0 days' '+%A')
TODAY=$(date --date='0 days' '+%Y%m%d')

#get each page 1 till 9
PAGE=1
until [ $PAGE -gt 9 ]; do
mv "0$PAGE".jpg banjarmasinpost"$TODAY"-"$DAY"_"0$PAGE".jpg
let PAGE+=1
done

是否可以将日期的所有名称都小写,例如星期一,星期二,星期三,星期四,星期五,星期六和星期天? 谢谢大家。

解决方法

请参见bash reference manual

${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,pattern}

大小写修改。此扩展修改了参数中字母字符的大小写。与路径名扩展一样,扩展模式以生成模式。参数扩展值中的每个字符都针对模式进行测试,如果与模式匹配,则将转换其大小写。该模式不应尝试匹配多个字符。 ^运算符 将匹配模式的小写字母转换为大写; ,运算符将匹配的大写字母转换为小写。^^,扩展将转换后的每个字符转换为扩展值; ^,扩展名匹配并仅转换扩展值中的第一个字符。如果省略模式,则将其视为匹配每个字符的“?”。 [...]

因此,如果$DAY包含Wednesday,则可以编写${DAY,}以获得wednesday

$ DAY=$(date --date='0 days' '+%A')
$ echo $DAY
Wednesday
$ echo ${DAY,}
wednesday

(在这种情况下,您也可以使用${DAY,},因为您只需要担心一个字母即可。)

,

Bash参数扩展可以解救! ${DAY,}将扩展为$DAY的小写字母值。

(此外,shell脚本中的变量名称应为小写字母,请参见this unix.stackexchange问​​题。)