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

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

我添加了一个 env 变量,/etc/environment但由于变量值包含 # 符号,因此字符串被删除。

MYSQL_PWD="something#no"

现在,如果我执行env上面的代码,就会产生MYSQL_PWD=something.我怎样才能逃脱哈希?我已经尝试过\角色了。

答案1

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

我发现这个 SF 问答的标题是:如何在 Linux etc/环境中正确转义前导“#”字符?。这些方法都不起作用:

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

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

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

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

使用/etc/profile/etc/bashrc.

但仍另一个问答给出了为什么会出现这种情况的理由:

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

参考

答案2

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

test="'h/#ello'"

答案3

使用 NodeJS 进行测试(特别是在 Express 应用程序中),如果变量包含保留字符,则可以将整个变量放在引号中。

EXAMPLE_VAR = he#llo
FIXED_EXAMPLE_VAR = "he#llo"

然后尝试使用变量:

console.log(process.env.EXAMPLE_VAR); // outputs `he`
console.log(process.env.FIXED_EXAMPLE_VAR); // outputs `he#llo`

答案4

#用。。。来代替%23

例如来自:

postgres://user:#password#@server:port/database

到:

DB_URI="postgres://user:%23password%23@server:port/database"

相关内容