bash - 变量值用单引号引起来

标签 bash azure variables gitlab

我正在 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/

相关文章:

Javascript 函数变量范围直通地理定位

macos - 从环境变量中删除路径

linux - 目录和所有子目录中的递归解压缩和删除

bash - 获取 "sed error - illegal byte sequence"(在 bash 中)

Java:变量增加错误?

objective-c - 何时何地从任意消息返回值初始化外部变量?

bash - ' ]' expected Bash syntax error - despite ` ]` 存在并被空间包围

azure - Azure 中的角色。查看发票的权限

azure - Az Powershell New-AzureADServiceAppRoleAssignment 哪个 id 是哪个?

azure - 为 .net 6 Web 应用程序配置 App Insights