我只是对Bash字符串处理非常熟悉,而在如何安全地处理字符串分配和远距离引用方面遇到了麻烦。
我有一个包含密码的变量$pw
。为简单起见,假设它不能包含引号,换行符或控制字符,但可以包含空格。我需要将其插值到长参数的值(例如--vars "pw='[password]'"
)中,并将该参数和值存储到变量$pw_param
中,以便将自身插值到后面的命令中(例如{{1} }。这两个步骤的原因是,最终命令实际上建立了多个不同的参数。
到目前为止,我的工作是:
mycommand $pw_param
如果我检查pw="foo bar"
pw_param="--vars \"pw='$pw'\""
的内容,则会看到其中包含以下内容:
$pw_param
这正是我想作为参数传递的内容。如果将它作为参数显式传递,那么所有这些都可以正常工作,并且我的命令会收到它:
--vars "pw='foo bar'"
但是,如果我尝试改用变量(据我所知,应该直接对变量进行插值,因为它不在引号中),所以我的命令没有收到正确的参数。我不确定到底是怎么回事,但是与上面的文字调用不一样:
mycommand --vars "pw='foo bar'"
为了简单起见,我假设密码不包含引号。在现实生活中,我无法确定这一点。理想情况下,我先将mycommand $pw_param
转义为$pw
。我尝试使用$pw_param
方法from this answer,但走得太远,尤其是因为我什至无法超越一级。