转义 /etc/environment 中的井号 (#)

Uma*_* A. 23 login pam environment-variables

我正在向其中添加一个 env 变量,/etc/environment但是因为变量值包含 # 符号,所以字符串是条带化的。

MYSQL_PWD="something#no"
Run Code Online (Sandbox Code Playgroud)

现在,如果我做env上面的代码 yield MYSQL_PWD=something。我怎样才能逃避哈希?我已经尝试过\性格。

slm*_*slm 22

这似乎不可能与/etc/environment. 它是独立于 shell 的变量的公共位置。鉴于此,它看起来不支持其中带有哈希标记 ( #) 的字符串,并且似乎没有办法转义它们。

我发现这个 SF 问答题为:如何在 linux etc/environment 中正确转义前导“#”字符?. 这些方法都不起作用:

  • 控制=“你好”
  • 测试0 =“#你好”
  • test1="h\#ello"
  • 测试2 =“你#你好”
  • test3="h//#ello"
  • test4="h/#ello"
  • test5=h#你好
  • test6=h\#你好
  • test7=你#你好
  • test8=h//#你好
  • test9=h/#ello
  • test10='你#你好'
  • test11='h\#ello'
  • test12='你#你好'
  • test13='h//#ello'
  • test14='h/#ello'

该问题的公认答案以及我的建议是什么:

嗯,你想做的棘手的事情/etc/environment不是 shell 语法,它看起来像一个,但事实并非如此,这确实让人们感到沮丧。背后的想法/etc/environment很棒。一种独立于外壳的设置变量的方法!好极了!但实际限制使其无用。

你不能在那里传递变量。尝试例如放入MAIL=$HOME/Maildir/它,看看会发生什么。最好停止尝试将它用于任何目的,唉。因此,如果它是由外壳处理的,那么您无法用它来做您期望能够做的事情。

使用/etc/profile/etc/bashrc

还有一个问答给出了为什么会这样:

没有办法/etc/environment转义#(因为它被视为注释),因为它正在被 PAM 模块“pam_env”解析,它将它视为一个简单的 KEY=VAL 对列表并相应地设置环境。它不是 bash/shell,解析器没有用于进行变量扩展或字符转义的语言。

参考

  • @UmairAshraf - 不是一个错误,只是考虑到该文件的作用而限制了功能。该文件跨越多种 shell 技术,因此它必须与将使用它的所有 shell 都支持的功能相一致。 (2认同)

小智 5

双引号内的单引号对我有用。可能会帮助某人

test="'h/#ello'"
Run Code Online (Sandbox Code Playgroud)