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