如何转义从 shell 脚本中包含特殊符号的命令返回的值

How to escape a value returned from a command that contains special symbol in the shell script

我正在处理 shell 脚本,该脚本创建一个扩展名为 .env 的文件,其中包含我从 Azure Key Vault 获取的环境变量。 问题是,当我获取密码时,它包含一个特殊字符“%”,该字符被解释为带有以下消息的未知命令: %N: 无效指令

文件看起来像:

#!/bin/zsh

touch vars.env 

printf "PASSWORD=$(az keyvault secret show --name app-PASSWORD --vault-name "my-vault" --query "value";) \n" >>vars.env

及文件中的结果(仅“%”符号前的部分):

密码="bKt39f

问题是如何对其进行转义,以便将整个密码而不是其中的一部分写入文件。

您使用的 printf 有误。它的第一个参数是格式字符串,它告诉它如何打印实际数据(在其余参数中)。在格式字符串中,% 表示一个格式说明符,它告诉它插入一个数据参数(紧跟在 % 之后的内容告诉它如何格式化该数据)。使用这样的东西:

printf 'PASSWORD=%s\n' "$(az keyvault secret show --name app-PASSWORD --vault-name "my-vault" --query "value";)" >>vars.env

或者将“PASSWORD=”视为数据而不是格式的一部分:

printf '%s\n' "PASSWORD=$(az keyvault secret show --name app-PASSWORD --vault-name "my-vault" --query "value";)" >>vars.env

在这两个中,格式字符串中的%s表示“将下一条数据作为普通字符串插入”。