如何传递带有特殊字符的参数来调用shell脚本

Ran*_*ngh 2 linux bash shell quoting

使用如下所需的参数调用.sh(shell脚本): -

sh home/example.sh --context_param dbUserName=username --context_param dbPassword=exam!ple##### --context_param resultDate=2017-01-13
Run Code Online (Sandbox Code Playgroud)

使用参数dbUsername和password调用example.sh但是出现以下错误: -

-bash:!ple #####:找不到事件

我认为特殊字符限制命令执行.然后我如何传递特殊字符.任何帮助都会很明显.

Ini*_*ian 7

改变线,

dbPassword=exam!ple#####
Run Code Online (Sandbox Code Playgroud)

至,

dbPassword='exam!ple#####'
Run Code Online (Sandbox Code Playgroud)

避免!(历史扩张)被特别对待bash

man bashQUOTING分节,

使用命令历史记录扩展功能时(请参阅下面的历史记录扩展),必须引用历史记录扩展字符(通常为!)以防止历史记录扩展.

更多 HISTORY EXPANSION

历史扩展是由历史扩展角色的外观引入的,这是!默认情况下.只有反斜杠(\)和单引号才能引用历史记录扩展字符.

此外,最好引用所有name-value对,以防止shell完成分词.

sh home/example.sh --context_param dbUserName="username" --context_param dbPassword='exam!ple#####' --context_param resultDate="2017-01-13"
Run Code Online (Sandbox Code Playgroud)

关于分词,从man页面,

单词分裂

shell扫描参数扩展,命令替换和算术扩展的结果,这些结果在双引号内没有出现用于分词.shell将每个字符IFS视为分隔符,并使用这些字符作为字段终止符将其他扩展的结果拆分为单词