用于处理shell脚本输入中的特殊字符的简单解决方案

And*_*ers 2 bash shell

我有一个脚本可以使用选项覆盖配置文件中的值,例如,option --password可以覆盖配置文件中的设置(请注意,这不是关于安全性的讨论).但是,密码可以包含包含的字符,bash这些字符被识别为特殊字符,并且这些字符需要转义或放在""中.

现在我理解了这一点.虽然我不知道将来谁会使用这个脚本,所以我想保存他或她的密码不正确的麻烦,因为,他或她忘了把密码放在""或逃避特殊字符.

处理这种输入的最佳方法是什么?

提前致谢.

jm6*_*666 5

嗯..双引号是不够的.必须使用单引号,因为例如罕见的情况

mycommand --password "AAA$PWD" #is worng for any exported environment varname
mycommand --password 'AAA$PWD' #ok
Run Code Online (Sandbox Code Playgroud)

这里没有办法避免这种情况,因为你的用户使用的是一种shell,有什么变量扩展和metachar-globbing.你的命令已经扩展了args,所以这里没有办法在你的脚本中捕获它.

唯一的方法 - 正如@Bohemian上面所说 - 从tty读取密码.您可以在当前脚本周围编写一个简单的包装器,从tty读取密码,之后将使用正确的转义--pasword参数执行脚本.