【问题标题】:Passing a bash script variable to a quoted value in backticks将 bash 脚本变量传递给反引号中的引用值
【发布时间】:2014-12-12 12:57:04
【问题描述】:

无关:这一直在我的脑海里。

下面是一个 curl 函数,它的工作原理如下(为了便于阅读,我把它放在多行上):

fixVersionQuery='https://thejirainstall.com/jira/rest/api/2/project/ON/versions?';

myJSONResponse=`curl -u username:password -X GET -H "Content-Type: application/json" \
--insecure --silent $fixVersionQuery |jq '.[] | {id,name} |  \       
select(.name=="Version-1.2.3") | .["id"]'`; 

以上工作。但是,我想查询我将其名称传递给函数的版本。所以"Version-1.2.3" 可能是一个变量,例如"${JIRA_FIXVERSION}"。问题是在上面的行中,我无法弄清楚要使用撇号的反引号或引号的组合。虽然我知道函数的一般结构会是……

JIRA_FIXVERSION;
fixVersionQuery='https://thejirainstall.com/jira/rest/api/2/project/ON/versions?';

myJSONResponse=`curl -u username:password -X GET -H "Content-Type: application/json" \
--insecure --silent $fixVersionQuery |jq '.[] | {id,name} |  \       
select(.name=="'$JIRA_FIXVERSION'") | .["id"]'`; 

如果我使用上面的 "'$JIRA_FIXVERSION'" 或 ${JIRA_FIXVERSION},则会出现编译错误。

【问题讨论】:

  • 你从那个例子中得到了什么错误?假设 JIRA_FIXVERSION 的值是一个简单的版本字符串(不带引号等),这应该可以工作。

标签: bash jira jq


【解决方案1】:

我想你只需要引用双引号(这样它们就可以被 shell 作为文字字符单独留下)。 shell 通常会替换反引号中的变量,我想您只想在扩展的 JIRA_FIXVERSION 周围加上双引号,以便生成类似于您给出的示例的命令(其中包含 "Version-...")。

例子:

$ XX=bla; echo `echo kklkj | sed s/kk/\"$XX\"/g`
"bla"lkj

或者,实际上,更简单:

XX=bla; echo `echo \"$XX\"`

->“布拉”

【讨论】:

    【解决方案2】:

    好的,

    我终于明白了。所以

    1. 我有一个指向 bash 文件的别名。该文件接收一个必须用引号传递的变量:

    $jiraReleases "Version1.2.3"

    1. 文件采用变量:

    JIRA_FIXVERSION=$1

    1. 在 jq 中,引号被转义,并添加了额外的引号和撇号。请注意,下面的行也被单引号和反引号包围。

    .[] | {id,name} | select(.name=='\""${JIRA_FIXVERSION}"\"')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多