【发布时间】:2013-03-10 18:44:08
【问题描述】:
问题的背景是我试图将其中包含单引号的密码短语传递给 openssl 配置文件的 input_password 参数。
取自openssl configuration file manual:
可以使用任何类型的引号来转义某些字符 或 \ 字符。通过使一行的最后一个字符成为 \ 一个值 字符串可以分布在多行中。此外序列 \n、\r、\b 和 \t 被识别
我假设单引号可以转义。问题是我很难用 sed 生成转义的单引号。
我的意思是,如果从脚本或命令行运行,以下表达式不会产生相同的结果。执行以下命令:
cut -d: -f2 "$EMPLOYEE_CREDENTIALS_FILE"| sed -e "s|'|\\\'|g"
其中 "$EMPLOYEE_CREDENTIALS_FILE" 是格式如下的文件
username:password
当我直接在 bash 中运行此命令时,它会产生我认为 openssl.conf 允许的输出:
tentacle caravan sovereignty appraisal sass\'s
当我在脚本中运行它时,它只会生成正常的未转义密码:
tentacle caravan sovereignty appraisal sass's
我想知道我做错了什么。
【问题讨论】:
-
问题是什么似乎很清楚。 “我在尝试将包含单引号的密码短语传递给 openssl 配置文件的 input_password 参数时遇到问题。”我想出了一个不起作用的解决方案。因此,答案应该要么更正命令以允许转义发生,要么提供另一种方法来处理其中包含单引号的密码短语。我不知道我是否可以更清楚。
-
我“认为”,因为文档没有明确说明单引号是否可以转义:“可以使用任何类型的引号或 \ 字符来转义某些字符。通过使一行的最后一个字符a \a 值字符串可以分布在多行中。此外,还可以识别序列\n、\r、\b 和\t”取自openssl.org/docs/apps/config.html。