使用:upper:在bash脚本中检查filename是否包含大写字符

时间:2017-02-24 20:54:19

标签: regex bash

我遇到了这个bash脚本,用于将包含大写字符的文件名转换为小写字母。

LIST="$(ls)"

for name in "$LIST"; do

if [[ "$name" != *[[:upper:]]* ]]; then
continue
fi
#... remainder omitted

这是我不确定的\*[[:upper:]]\*字符类。它是否读作零个或多个字符后跟一个大写字母后跟零个或多个字符

1 个答案:

答案 0 :(得分:4)

*[[:upper:]]*读作"零个或多个字符后跟一个大写字母后跟零个或多个字符"。请注意,确切地认为是大写字母的内容取决于LC_CTYPELC_ALL区域设置特定变量的值。

也就是说,如果你想找到并重命名名字中至少有一个大写字母的文件:

for file in *[[:upper:]]*; do
  [[ -e $file || -L $file ]] || continue # handle case where glob failed to match
  printf 'Found file with at least one upper-case character: %q\n' "$file"
  mv -- "$file" "${file,,}" ## move file to its all-lowercase-named equivalent
done

请注意${foo,,}生成变量内容的全小写形式是一个相当新的功能,在bash 4.x中添加。

请参阅: