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

Mas*_*ter 4 linux bash shell ubuntu

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

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

现在我有这样的命令

./myscript.sh '$VAR1'
Run Code Online (Sandbox Code Playgroud)

我从某个 diff 进程中获取 $VAR1,当我显示它时,它看起来与上面一模一样。

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

我可以控制 myscript.sh 但不能控制上面的命令。

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

αғs*_*нιη 5

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

./myscript.sh "$(printf '%q\n' "$VAR1")"
Run Code Online (Sandbox Code Playgroud)

...或者在您想要传递给其他命令之前在脚本中执行相同的操作:

VAR2="$(printf '%q\n' "$VAR1")"
Run Code Online (Sandbox Code Playgroud)