在jenkins配置外壳中为双引号表达式添加了额外的单引号

时间:2018-06-20 22:06:16

标签: bash shell unix jenkins sh

我是bash脚本的新手。我正在运行bash脚本。我希望该表达式被评估为“值”。但是当我在詹金斯身上执行它时,我得到的是“价值”。不知道这是否与jenkins或shell脚本有关。 下面是示例代码:

#!/bin/bash
set -x
Date1=${date}
dql="\"" #double quote literal
Date1=$dql$Date1$dql 
echo $Date1 #"2018-06-21"
expr=$( date is $Date1) # output is ´"2018-06-21"´

我用单引号括起来的值。但是我只需要双引号。您能帮我解决/确定问题吗?


编辑以显示原始脚本

#!/bin/bash

set -x

mydate=`date`              # Save the output of date command into the variable mydate

dquote="\""                # Save the dbl-quote character into the variable dquote

mydate=""${dquote}""${mydate}""${dquote}""     # Construct a string that encases the date with dbl-quotes



eval myexp=$mydate



echo $mydate

echo date is "${mydate}"

#echo -e "\042"



output :





++ date

+ mydate='Sun Jun 24 10:04:12 UTC 2018'

+ dquote='"'

+ mydate='"Sun Jun 24 10:04:12 UTC 2018"'

+ eval 'myexp="Sun' Jun 24 10:04:12 UTC '2018"'

++ myexp='Sun Jun 24 10:04:12 UTC 2018'

+ echo '"Sun' Jun 24 10:04:12 UTC '2018"'

"Sun Jun 24 10:04:12 UTC 2018"

+ echo date is '"Sun Jun 24 10:04:12 UTC 2018"'

date is "Sun Jun 24 10:04:12 UTC 2018"

如果您看到的是最后一行,则..该表达式先给出单引号然后再将双引号引起来,这就是我的问题。在运行时,相同的参数将传递到另一个脚本,在该脚本中单引号又将失败。但是,回显输出与预期的一样,只有双引号,但是运行时输出具有额外的单引号。希望这次我清楚。我无法发布实际代码,因为它是合规性相关问题。

2 个答案:

答案 0 :(得分:0)

您的问题对我来说还不清楚。

您将日期存储到Bash shell变量中。您想将此变量传递给另一个程序(我猜这就是您说“在Jenkins中执行”时的意思),但是变量的值具有额外的引号集,特别是外部单引号,您不会想。我猜你在问如何防止外面的单引号。

我对你的理解正确吗?

以下类似代码有帮助吗?

#!/bin/bash
mydate=`date`              # Save the output of date command into the variable mydate
dquote="\""                # Save the dbl-quote character into the variable dquote
mydate="${dquote}${mydate}${dquote}"     # Construct a string that encases the date with dbl-quotes 
echo date is [$mydate]     # Output is:  date is ["Wed Jun 20 22:52:46 EDT 2018"]

我看到您编辑过的问题,老实说,我仍然不清楚。我猜想您想将具有嵌入空格的变量保存为完整的字符串,以便传递给另一个需要处理该字符串的脚本。希望这是准确的。

尝试一下:

#!/bin/bash
mydate="\"`date`\""
echo date is [$mydate]

% date is ["Mon Jun 25 20:38:00 EDT 2018"]

注意,我使用[]作为分隔符只是为了避免与引号引起混淆;我本可以使用其他任何字符作为分隔符。现在,$ mydate变量包含双引号。

答案 1 :(得分:0)

根据您的清晰评论,以下是您可以尝试的代码:

$ date="2018-06-21"
$ expr="date is \"${date}\""
$ echo $expr
date is "2018-06-21"

在此代码中,expr将包含date is "2018-06-21",其中日期值按您的期望用双引号引起来。