变量值周围的单引号

时间:2020-06-23 10:13:15

标签: bash azure variables gitlab

我正在GitLab CI中编写管道,并且在GitLab的全局变量中定义了多个变量...其中一个包含各种特殊字符,为了成功进行身份验证,这些字符必须用单引号包含(使用硬编码值进行测试)。

因此,我在GitLab中定义的变量为DEV_ARM_CLIENT_SECRET,它包含类似以下内容的内容:JSBDbshe66!#12$@a-然后,我将该变量导出到需要它的管道阶段,如下所示:{{1 }}。

我尝试过在该变量周围添加双引号和单引号,但这不起作用-如前所述,当在命令行上使用硬编码值手动尝试此操作时,它仅适用于单引号。我什至尝试使用export ARM_CLIENT_SECRET=$DEV_ARM_CLIENT_SECRET无济于事。

对此将有任何帮助。

干杯。

1 个答案:

答案 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'