Bash Shell转换大小写

Bash Shell转换大小写,数码相机里全是一堆大写字母命名的文件,如 IMG0001.JPG。你想将文件名改成小写,但又不愿意挨个重新输入。

解决方案

bash 4.0 中的几个运算符可以在引用变量名时转换其大小写。如果变量 $FN 中包含一个需要转换成小写的文件名(字符串),那么 ${FN,,} 会返回全部是小写形式的字符串。与此类似,${FN^^} 会返回全部是大写形式的字符串。甚至还有 ${FN~~},它可以切换大小写,将所有的小写字母转换成大写,大写字母转换成小写。

以下的 for 循环会将所有 .JPG 类型的文件名更改成小写字母。

for FN in *.JPG
do
    mv "$FN" "${FN,,}"
done

或者写成单行脚本:

for FN in *.JPG; do mv "$FN" "${FN,,}" ; done

bash 4 或更高版本中还有另外一种方法:你可以将变量声明成始终为小写字母的类型。赋给该变量的任何文本都会转换成小写。要想在 for 循环中使用这种方法来重命名文件,使用简单的赋值即可,无须任何字符串操作。

declare -l lcfn     # 变量内容会转换成小写字母
for FN in *.JPG
do
    lcfn="$FN"
    mv "$FN" "$lcfn"
done

还有一些类似的变量声明,它们可以更改所有字母或首字母的大小写。以下是一个简单的演示程序,其中展示了这类声明的用法。

declare -u UP    # 全部大写
declare -l dn    # 全部小写
declare -c Ca    # 仅首字母大写

while read TXT
do
    UP="${TXT}"
    dn="${TXT}"
    Ca="${TXT}"

    echo $TXT  $UP  $dn  $Ca
done

如果变量是通过 -c 声明的,即便字符串中包含多个单词,也只有首字母大写。你可以尝试运行并观察其如何工作。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!