【问题标题】:How can I escape arguments passed in bash script command line如何转义在 bash 脚本命令行中传递的参数
【发布时间】:2023-04-03 21:47:02
【问题描述】:

我有一个变量,它来自一些类似的地方:

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

现在我有这样的命令

./myscript.sh '$VAR1'

我从某个 diff 过程中获得了 $VAR1,当我显示它时,它看起来与上面的完全一样。

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

我可以控制 myscript.sh 但不能高于命令。

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

【问题讨论】:

  • bash 中的变量不要在= 的任何一侧占用空格。它不应该是var = 1,而是var=1
  • @Inian 加上左边的变量没有美元符号。也就是说,我很好奇答案。
  • ./myscript.sh '$VAR1' 不能自行失败,因为变量没有被扩展。
  • 有人搞砸了eval 声明吗?请包含显示错误的MCVE
  • @Master :请在您的问题中更加准确。您在此处提供的两个语句在语法上没有任何错误,因此如果有任何可能失败,那一定是在评估 myscript.sh 期间,但由于我们不知道此脚本中的内容,因此我们无法判断发生了什么错误的。除此之外,将字符串 $VAR 传递给脚本的整个概念(而不是变量 VAR 的内容对我来说看起来很奇怪,但你可能会知道你在这里做什么......

标签: linux bash shell ubuntu


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 2013-06-19
    • 2021-02-01
    • 1970-01-01
    • 2013-10-11
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多