python变量中有单引号_包含单引号的变量就消失了

我有一个脚本可以驱动很多包的安装。在一个地方,它使用pip。其中一个包在构建过程中需要它自己的特殊命令行参数。在

pip允许将安装选项传递到生成过程,如下所示:

pip install-U--timeout 30$options--install option='--hdf5=/usr/local/hdf5'表

--install选项是pip的一个参数。它设置的值,--hdf5=/usr/local/hdf5将传递给生成过程。所以,单引号必须在那里,把所有的文本组合成一个跟在等号后面的参数。您可能会说我可以用双引号括住install选项的值。好吧,在命令行我可以。在

但是,这里有一个额外的复杂性。这是一个剧本。pip命令的参数值传递给数组中的函数。此包的数组项如下:

(“tables,pip,,--install option='--hdf5=/usr/local/hdf5'”)

接收函数解析此片段中设置为的数组项:IFS="," # to split apart the pkg array entries

for pkg in "${pkglist[@]}"; do

set -- ${pkg}

if [[ "$2" == "pip" ]]; then # $1 is pkg, $2 is pip, $3 is url, $4 is options

DoPip $1 $3 $4

...

因此,对于这个包,DoPip看到了:DoPip表“”--install option='--hdf5=/usr/local/hdf5'

问题发生在DoPip中。当我需要运行pip时,我不知道如何扩展最后一个参数。我做了一堆调试,看看会发生什么。所发生的是,3美元的价值只是被丢弃了——它就消失了。它将在一个字符串中回显,但不能作为命令的一部分工作。在

看看函数DoPip。为了帮助调试,我将参数重新分配给显式变量。这没必要,但有助于确保我没有愚蠢的错误。在

^{pr2}$

接下来,我将变量源设置为pkgname或url(如果url非空)。我跳过这个片段--它起作用了。在

为了调试,我回显重新分配的参数:echo "1. The inbound arguments are: $pkgname $url $options"

输出看起来应该有用:入站参数是:tables--install option='--hdf5=/usr/local/hdf5'

下面是实际运行pip的语句,其中包含以下参数:pip install -U --timeout 30 $options $source

启用调试后,下面是Bash实际看到和运行的内容:+ pip install -U --timeout 30 tables

哇!$options怎么了?它不见了!事实上,在这个语句之前,我重复了echo,以验证脚本中没有任何干预部分导致值被刷新。没问题。我可以在前面立即回显$options的值——没关系。然后,它就不见了。在

我不知道发生了什么,也不知道该怎么做。我尝试过各种方法来转义数组中的单引号,字符串文本最初是根据单引号的特殊性来创建的。什么都不管用。整个变量膨胀就这样消失了。在

我试过用不同的方法进行扩展:pip install -U --timeout 30 "$options" $source

那不管用。选项中的字符串出现,但被单引号包围,因此pip命令抛出错误。接下来,我尝试了:pip install -=U --timeout 30 "${options}" $source

也失败了:单引号和大括号出现了,皮普又不高兴了。在

--install options参数是必需的。没有它,生成将失败。在

一定有办法的。有什么建议吗?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值