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

时间:2011-06-05 13:15:38

标签: bash shell

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

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

处理此类输入的最佳方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:5)

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

mycommand --password "AAA$PWD" #is worng for any exported environment varname
mycommand --password 'AAA$PWD' #ok

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

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

答案 1 :(得分:0)

有一个简单但不太直观的解决方案。

使用'“CARACTER”'封装导致问题的字符。并将所有密码字符串放在单引号之间。

在我的情况下,造成问题的角色是'(单引号)。

所以,如果我有这样的命令:

mycommand --password 'AAA'PWD' 

替换为:

mycommand --password 'AAA'"'"'PWD'

现在我的密码是三个字符串的串联。说明:

'AAA' + "'" + 'PWD' # plus sign is just to make clear the contatenation.

这是有效的。