为什么这个bash / shell脚本从字符串中删除重复的字符?

时间:2019-03-20 19:25:08

标签: 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

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

1 个答案:

答案 0 :(得分:2)

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

  

-s,--squeeze-repeats

     

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

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

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