【问题标题】:Pass an environment variable with quoted string to make传递带引号的字符串的环境变量以进行
【发布时间】:2020-11-02 10:19:04
【问题描述】:

以下命令按预期工作并且不会引发错误:

$ make SVC_ARGS="-port 80" SVC=server 

这不起作用:

$ MAKE_PARAMS=" SVC_ARGS='-port 80' SVC=server "
$ make $MAKE_PARAMS
/bin/sh: 1: Syntax error: Unterminated quoted string
make: *** No rule to make target '80"'. Stop.

我尝试对SVC_ARGS 使用单引号和转义双引号,同样的错误。

使用环境变量将参数传递给make 可以正常工作,只要所有参数都不需要引号。

基本上,我需要找到一种方法将单个环境变量传递给make,该变量将扩展为参数列表,其中一些可能包含引号。

【问题讨论】:

    标签: bash makefile quotes


    【解决方案1】:

    这里有两个选项来处理应该分成多个参数的变量:

    使用 eval 强制报价评估

    MAKE_PARAMS=" SVC_ARGS='-port 80' SVC=server "
    eval make $MAKE_PARAMS
    

    或者,使用数组变量来存储各种选项:

    MAKE_PARAMS=(SVC_ARGS='-port 80' SVC=server)
    make "${MAKE_PARAMS[@]}"
    

    【讨论】:

      【解决方案2】:

      $ MAKE_PARAMS=" SVC_ARGS='-port 80' SVC=server "
      $ make $MAKE_PARAMS

      当您创建MAKE_PARAMS 变量时,您添加了一个空格,但在第二行中,您在使用MAKE_PARAMS 变量之前添加了一个空格,这将是一个双倍空格。也许分别创建两个参数。

      SVC_ARGS='-port 80'
      SVC=server "

      make $SVC_ARGS $SVC

      SVC_ARGS 可以在语音标记中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-24
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 2018-12-22
        • 2011-04-26
        • 2015-12-30
        相关资源
        最近更新 更多