【发布时间】:2020-09-14 17:11:15
【问题描述】:
我有一个参数文件(param.env),内容如下。
MY_PARAM=com:27}WMV\)pviZN
另外,我正在获取 MY_PARAM 的值并写入随机文件的 bash 文件。
#!/bin/bash
value=$(grep "^MY_PARAM=" param.env | cut -d '=' -f2-)
value1=$(cat param.env | grep "^MY_PARAM" | sed 's/=/ /' | awk '{print $2}')
echo $value
echo $value1
printf '%s\n' "$value"
输出:
com:27}WMV\)pviZN
com:27}WMV\)pviZN
com:27}WMV\)pviZN
但是,我希望 \ 被转义,不应成为输出的一部分。
我也不允许编辑 param.env。
预期输出:
com:27}WMV)pviZN
【问题讨论】:
-
请问为什么不能使用 sed 去除反斜杠?
-
当 ` \` 之后的下一个字符是
n或t而不是字符串中的)时会发生什么? -
命令替换的结果不受引号去除;反斜杠是值的一部分,不会转义
)。 -
至少根据github.com/motdotla/dotenv 的自述文件,没有规定(除了用真正的换行符替换
\n)在.env文件中使用反斜杠转义单个字符。 -
您需要反斜杠的唯一原因是该行是否由 shell 作为分配处理,因为
)将被视为元字符。也许写param.env的人认为它将作为shell 脚本处理;我不知道应该如何解析.env文件的任何硬性规则。