我正在寻找一个简单输入的最佳方法:
echo -n "Enter a string here: " read -e STRING
通过删除非字母数字字符,降低(大小写)并用下划线替换空格来清理它.
订单有关系吗?这tr
是最好/唯一的方法吗?
正如dj_segfault指出的那样,shell可以为你完成大部分工作.看起来你不得不依靠外部的东西来降低弦线的外壳.为此你有很多选择,比如上面的perl单行等,但我认为tr可能是最简单的.
# first, strip underscores CLEAN=${STRING//_/} # next, replace spaces with underscores CLEAN=${CLEAN// /_} # now, clean out anything that's not alphanumeric or an underscore CLEAN=${CLEAN//[^a-zA-Z0-9_]/} # finally, lowercase with TR CLEAN=`echo -n $CLEAN | tr A-Z a-z`
这里的顺序有点重要.我们希望摆脱下划线,再加上带下划线的空格,所以我们必须先确保剥离下划线.通过等待将事物传递到tr直到结束,我们知道我们只有字母数字和下划线,我们可以确定我们没有空格,因此我们不必担心shell会解释特殊字符.
Bash可以自己完成这一切,非常感谢你.如果你查看参数扩展的手册页的部分,你会看到bash有内置替换,substring,trim,rtrim等.
要消除所有非字母数字字符,请执行此操作
CLEANSTRING=${STRING//[^a-zA-Z0-9]/}
那是奥卡姆的剃刀.无需启动其他流程.