首页 > 解决方案 > 为什么这个 bash/shell 脚本要从字符串中删除重复字符?

问题描述

我有一个脚本询问项目名称,然后我想将该名称转换为安全目录名称。我正在使用以下内容:

echo "Please enter the name of the new project (eg My New Project):"
read -r project_name

project_directory=$(echo "$project_name" | tr -s '[:upper:]' '[:lower:]' | tr -s '[:space:]')

我认为这一直很好,但我今天注意到,如果我输入一个包含 2 个或更多字符的单词,那么重复的字母也会被删除。

Room = rom
Running = runing

只是有点困惑为什么,我的印象是脚本会将大写字符转换为小写并且空格会被删除,但显然不是。谁能解释为什么?

标签: bashshell

解决方案


因为这就是这样tr -s做的。从手册页:

-s, --squeeze-repeats

将最后指定的 SET 中列出的重复字符的每个序列替换为该字符的一次出现

如果您只想将其从上转换为下,请删除-s

tr '[:upper:]' '[:lower:]'

推荐阅读