我正在 GitLab CI 中编写一个管道,并且在 GitLab 的全局变量中定义了多个变量...其中一个包含各种特殊字符,需要用单引号包含这些特殊字符才能成功进行身份验证(使用硬编码值进行测试) )。
因此,我在 GitLab 中定义的变量是 DEV_ARM_CLIENT_SECRET
并且它包含类似以下内容: JSBDbshe66!#12$@a
- 然后我将此变量导出到需要它的管道阶段如下所示:export ARM_CLIENT_SECRET=$DEV_ARM_CLIENT_SECRET
。
我尝试简单地在该变量周围添加双引号和单引号,但这不起作用 - 如前所述,当在命令行上使用硬编码值手动尝试此操作时,它仅适用于单引号。我什至尝试使用 \'$DEV_ARM_CLIENT_SECRET\'
但无济于事。
对此的任何帮助将不胜感激。
干杯。
最佳答案
与所有其他命令一样,对变量的赋值也将由 shell 进行解析。为了防止 shell 解析特殊字符,必须使用“引号”。单个字符可以用反斜杠 (\) 括起来,多个字符可以用单引号 (') 或双引号 (") 括起来。单引号内的每个字符都将按字面意思处理。双引号字符大多按字面意思处理,主要异常(exception)(以及其他一些异常(exception)):变量将被其内容替换。
要在命令行中分配值“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'
关于bash - 变量值用单引号引起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62532365/