我正在GitLab CI中编写管道,并且在GitLab的全局变量中定义了多个变量...其中一个包含各种特殊字符,为了成功进行身份验证,这些字符必须用单引号包含(使用硬编码值进行测试)。
因此,我在GitLab中定义的变量为DEV_ARM_CLIENT_SECRET
,它包含类似以下内容的内容:JSBDbshe66!#12$@a
-然后,我将该变量导出到需要它的管道阶段,如下所示:{{1 }}。
我尝试过在该变量周围添加双引号和单引号,但这不起作用-如前所述,当在命令行上使用硬编码值手动尝试此操作时,它仅适用于单引号。我什至尝试使用export ARM_CLIENT_SECRET=$DEV_ARM_CLIENT_SECRET
无济于事。
对此将有任何帮助。
干杯。
答案 0 :(得分:2)
与其他命令一样,shell也将解析对变量的值分配。为了防止外壳程序解析特殊字符,必须用“引号”引起来。单个字符可以用反斜杠(\)引起来,多个字符可以用单引号(')或双引号(“)引起来。在单引号中,每个字符都按字面意义使用。双引号字符通常按字面量使用,并带有主要表现形式(除其他外):变量将被其内容替换。
要在命令行中分配值“ JSBDbshe66!#12 $ @ a”,必须使用单引号将其引起来,因为bang(!)符号(有关更多信息,请参见bash bang):
:〜$ DEV_ARM_CLIENT_SECRET ='JSBDbshe66!#12 $ @ a'
命令
:〜$ echo $ DEV_ARM_CLIENT_SECRET
为您提供所需的输出:
JSBDbshe66!#12 $ @ a
要将此值复制到另一个变量,只需在命令行中输入:
ARM_CLIENT_SECRET = $ DEV_ARM_CLIENT_SECRET
或者,您可以输入:
ARM_CLIENT_SECRET =“ $ DEV_ARM_CLIENT_SECRET”
以接收相同的结果。双引号之间的变量名将被替换为值,最后shell删除了引号。如果您将变量名称放在单引号之间
ARM_CLIENT_SECRET ='$ DEV_ARM_CLIENT_SECRET'
引号之间的每个字符将按字面意义使用:
:〜$ echo $ ARM_CLIENT_SECRET
$ DEV_ARM_CLIENT_SECRET
如果您通过反斜杠引用单引号,则
:〜$ ARM_CLIENT_SECRET = \'$ DEV_ARM_CLIENT_SECRET \'
“ $ ARM_CLIENT_SECRET”的值将与$ DEV_ARM_CLIENT_SECRET相同,并带有一个附加的前导和尾随单引号:
:〜$ echo $ ARM_CLIENT_SECRET
'JSBDbshe66!#12 $ @ a'