如何在 linux etc/environment 中正确地转义前导“#”字符?

如何在 linux etc/environment 中正确地转义前导“#”字符?

我想在etc/environmentAWS Linux AMI 2013.03 中存储系统范围的环境变量。在此示例中,我尝试存储短语“#hello”。请参阅以下示例。echo $control生成

hello

我预期echo $test0(以下)会产生:

#hello

但它却生成了一个空白行。以下是我输入的测试列表/etc/environment

  • control="hello"
  • test0="#hello"
  • test1="h\\#ello"
  • test2="h\#ello"
  • test3="h//#ello"
  • test4="h/#ello"
  • test5=h#ello
  • test6=h\\#ello
  • test7=h\#ello
  • test8=h//#ello
  • test9=h/#ello
  • test10='h#ello'
  • test11='h\\#ello'
  • test12='h\#ello'
  • test13='h//#ello'
  • test14='h/#ello'

如果我注销然后重新登录机器,它将正确解析 /etc/environment。控制条件传递了echo $control。但是,没有一个测试用例正确响应。在每个实例中,哈希 (#) 之外的字符串要么被压缩,要么被忽略。例如,echo $test5产生h。有没有更好的方法来正确转义#

有趣的是,如果我执行,source /etc/environment那么一切都会按预期进行,并且确实echo $controlecho $test产生预期的结果。但是,在注销/登录时,问题又出现了……

答案1

嗯,你想做的是棘手的事情 /etc/environment 不是 shell 语法,它看起来像一个,但实际上不是,这确实让人沮丧。/etc/environment 背后的想法很棒。一种独立于 shell 的设置变量的方法!太棒了!但实际限制使它毫无用处。

您无法在其中传递变量。例如,尝试将 MAIL=$HOME/Maildir/ 放入其中,看看会发生什么。唉,最好不要再尝试将其用于任何目的。因此,您无法用它执行您期望在 shell 处理它时能够执行的操作。

使用 /etc/profile 或 /etc/bashrc。

相关内容