bash - 为什么这个 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
只是有点困惑为什么,我的印象是脚本会将大写字符转换为小写并且空格会被删除,但显然不是。谁能解释为什么?
解决方案
因为这就是这样tr -s
做的。从手册页:
-s, --squeeze-repeats
将最后指定的 SET 中列出的重复字符的每个序列替换为该字符的一次出现
如果您只想将其从上转换为下,请删除-s
:
tr '[:upper:]' '[:lower:]'
推荐阅读
- pycharm - 有没有办法在 PyCharm 中编写代码时自动格式化代码?
- c# - Find list of events on calendar occurring within One Day using Linq
- python - 什么是错误?时间数据与格式 '%m/%d/%y %I:%M:%S %p' 不匹配
- python - python - 如何在python中的matplotlib图中悬停时从给定列表中显示元素的索引号?
- c# - 使用 dotnetzip 库附加到电子邮件后无法打开 Zip 文件
- angular - 无法在 eslint 中为 typescript linting 关闭规则显式函数返回类型
- python - 如何将GDAL降级到2.4版?
- css - 让独立的孩子在没有明确身高的情况下拥有父母的 100% 身高
- jenkins - 如何在测试工具中模拟 Jenkins 作业参数?
- c# - 索引超出 C# 控制台应用程序中数组错误的范围