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



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

文件如下:

#!/bin/zsh
touch vars.env 
printf "PASSWORD=$(az keyvault secret show --name app-PASSWORD --vault-name "my-vault" --query "value";) n" >>vars.env

和文件中的结果(只有"%"之前的部分)符号):

PASSWORD="bKt39f

问题是如何转义它,使整个密码将写入文件,而不是其中的一部分。

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

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

或者处理"PASSWORD="作为数据而不是格式的一部分:

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

在这两种情况下,格式字符串中的%s表示"以普通字符串的形式插入下一段数据"。

相关内容

最新更新