我如何转义在bash脚本命令行中传递的参数

时间:2018-09-06 05:52:02

标签: linux bash shell ubuntu

我有一个变量,它来自某些地方,例如:

VAR1='hhgfhfghhgf"";2Ddgfsaj!!!$#^$\'&%*%~*)_)(_{}||\\/'

现在我有这样的命令

./myscript.sh '$VAR1'

我从某个差异过程中获得了$ VAR1,当我显示它时,它与上面的样子完全一样。

现在该命令失败了,因为变量中已经有单引号。在我使用它的过程中,它会在那时扩展,从而导致该错误。

我可以控制myscript.sh,但不能控制上述命令。

有什么办法可以在脚本中获取变量?

1 个答案:

答案 0 :(得分:1)

您所说的话在传递给脚本时不会失败。您的script可能存在处理问题(或该参数将传递到该命令的命令),无法正确扩展该变量。您可以使用printf%q修饰符来转义所有特殊字符,然后将其传递给脚本:

./myscript.sh "$(printf '%q\n' "$VAR1")"

...或在脚本中执行相同的操作,然后再传递给其他命令:

VAR2="$(printf '%q\n' "$VAR1")"