Bash:如何对存储在变量中的复杂命令参数进行插值?

时间:2018-09-19 01:21:34

标签: bash

我只是对Bash字符串处理非常熟悉,而在如何安全地处理字符串分配和远距离引用方面遇到了麻烦。

问题级别1

我有一个包含密码的变量$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'"

问题级别2

为了简单起见,我假设密码不包含引号。在现实生活中,我无法确定这一点。理想情况下,我先将mycommand $pw_param 转义为$pw。我尝试使用$pw_param方法from this answer,但走得太远,尤其是因为我什至无法超越一级。

0 个答案:

没有答案