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

标签 bash shell

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

现在我明白了这一点。虽然我不能说将来谁会使用这个脚本,所以我想避免他或她密码不正确的麻烦,因为他或她忘记将密码放在“”内或转义特殊字符性格。

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

提前致谢。

最佳答案

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

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

这里没有办法避免这种情况,因为您的用户使用某种 shell,它具有变量扩展和元字符通配。您的命令已经扩展了参数,因此无法在脚本中捕获它。

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

关于bash - 处理shell脚本输入中特殊字符的简单解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243125/

相关文章:

linux - bash脚本-使用expect而不使用plot命令来屏幕

linux - 合并排序的文件,缓冲最少

bash - 通过 bash 别名修改 $PATH 变量

linux - 别名 mkdir 以在 Mac 上打印详细输出

java - 我的 Java 程序在调用 shell 命令后挂起

linux - 使用 bash 读取文件,然后从提取的单词中执行命令

linux - 如何将错误输出发送到 bash 中的 stdout 和文件

string - 如何在 shell 中使用 echo 或 printf 覆盖多行?

linux - 将一个字符替换为 awk

linux - 在 unix/linux 命令行中定义函数(例如 BASH)