当前位置:  开发笔记 > 编程语言 > 正文

在bash脚本中,如何清理用户输入?

如何解决《在bash脚本中,如何清理用户输入?》经验,为你挑选了2个好方法。

我正在寻找一个简单输入的最佳方法:

echo -n "Enter a string here: "
read -e STRING

通过删除非字母数字字符,降低(大小写)并用下划线替换空格来清理它.

订单有关系吗?这tr是最好/唯一的方法吗?



1> Thomee..:

正如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 4开始,它也可以进行大小写修改.`lowercase = $ {CLEAN ,,}`[Bash Hackers Wiki](http://wiki.bash-hackers.org/syntax/pe)以比人工页面更人性化的方式解释参数扩展.

2> dj_segfault..:

Bash可以自己完成这一切,非常感谢你.如果你查看参数扩展的手册页的部分,你会看到bash有内置替换,substring,trim,rtrim等.

要消除所有非字母数字字符,请执行此操作

CLEANSTRING=${STRING//[^a-zA-Z0-9]/}

那是奥卡姆的剃刀.无需启动其他流程.


对于规范的子集,它是一个很好的答案,但它不会将空格更改为下划线.
推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有