如何转义从 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
表示“将下一条数据作为普通字符串插入”。
我正在处理 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
表示“将下一条数据作为普通字符串插入”。