Linux 不应使用echo命令打印反斜杠(\)

Linux 不应使用echo命令打印反斜杠(\),linux,bash,awk,echo,cut,Linux,Bash,Awk,Echo,Cut,我有一个参数文件(param.env),包含以下内容 MY_PARAM=com:27}WMV\)pviZN 另外,还有一个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

我有一个参数文件(param.env),包含以下内容

MY_PARAM=com:27}WMV\)pviZN
另外,还有一个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

您可以为文件提供源代码,然后字符串的行为将与您在交互式shell中分配的行为类似:

$ (. param.env; echo "$MY_PARAM")
com:27}WMV)pviZN

我已经将命令放入了子shell中,这样它们就不会污染环境。

我可以问一下为什么不能使用sed删除反斜杠吗?当字符串中“\`后面的下一个字符是
n
t
而不是
时会发生什么情况?命令替换的结果不会被删除引号;反斜杠是值的一部分,不转义
。至少根据上的自述文件,没有任何规定(除了用真正的换行符替换
\n
)用于在
.env
文件中使用反斜杠转义单个字符。需要使用反斜杠的唯一原因是,如果该行被shell作为赋值处理,因为
将被视为元字符。也许编写
param.env
的人认为它将作为shell脚本处理;我不知道如何准确解析
.env
文件有什么硬性规定。。。。可能会将结果导出回当前shell的var
value
。@alecxs这是不可能的(子shell不能修改父shell),但您可以执行类似于
param=$(.param.env;echo“$MY_param”)