我添加了一个 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"