如何在Bash脚本命令行中避免参数传递?

4

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

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

现在我有一个像这样的命令:
./myscript.sh '$VAR1'

我从某个不同的进程中获取$VAR1,当我显示它时,它看起来正好如上所述。

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

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

有没有办法让我在我的脚本中获取变量?


@Inian,左侧的变量不需要加美元符号。话说,我很想知道答案。 - Peter - Reinstate Monica
./myscript.sh '$VAR1' 本身不会失败,因为变量没有被扩展。 - that other guy
@thatotherguy,我从某个不同的进程中获取了$VAR1,当我显示它时,它看起来与上面完全一样,在我使用它扩展的过程中,在那一点上就会导致错误。 - Master
1
有人搞砸了一个 eval 语句吗?请包含一个 MCVE 来展示错误。 - that other guy
1
@Master:请在您的问题中更加精确。您在此处提供的两个语句在语法上没有任何错误,因此如果有任何可能失败的地方,那么必须是在myscript.sh的评估过程中出现了问题,但由于我们不知道这个脚本里面有什么,所以我们无法确定出了什么问题。除此之外,将字符串$VAR传递给脚本(而不是变量VAR的内容)的整个概念对我来说看起来很奇怪,但您可能知道在这里做什么... - user1934428
显示剩余2条评论
1个回答

5

您所说的传递给脚本时不可能出现失败的情况。也许是您的脚本存在处理问题(或一个命令将该参数传递进去),不能正确扩展变量。您可以使用printf%q修饰符来转义所有特殊字符,然后将其传递到您的脚本中:

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

您可以通过以下方式在脚本中修改文本,然后再传送给其他命令:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接