Linux 不应使用echo命令打印反斜杠(\)
我有一个参数文件(param.env),包含以下内容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
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的varvalue
。@alecxs这是不可能的(子shell不能修改父shell),但您可以执行类似于param=$(.param.env;echo“$MY_param”)