Environment-Variables

/etc/environment 中的轉義井號 (#)

  • February 6, 2020

我正在向其中添加一個 env 變數,/etc/environment但因為變數值包含 # 符號,所以字元串是條紋的。

MYSQL_PWD="something#no"

現在,如果我執行env上述程式碼會產生MYSQL_PWD=something. 我怎樣才能逃避雜湊?我已經嘗試過\性格。

這似乎是不可能的/etc/environment。它意味著作為與 shell 無關的變數的公共位置。鑑於此,它看起來不支持其中帶有井號 ( #) 的字元串,並且似乎沒有辦法逃避它們。

我發現這個 SF Q&A 的標題是:如何在 linux etc/environment 中正確地轉義前導“#”字元?. 這些方法都不起作用:

  • 控制=“你好”
  • test0="#你好"
  • test1=“h#ello”
  • test2=“h#hello”
  • test3=“h//#ello”
  • test4=“h/#ello”
  • 測試5=h#it
  • 測試6=h#it
  • 測試7=h#it
  • test8=h//#it
  • test9=h/#it
  • test10=‘h#it’
  • test11=‘h#it’
  • test12=‘h#it’
  • test13=‘h//#it’
  • test14=‘h/#it’

該問題的公認答案以及我的建議是什麼:

好吧,你想做/etc/environment的不是 shell 語法,它看起來很棘手,但它不是,這確實讓人們感到沮喪。背後的想法/etc/environment很棒。一種獨立於 shell 的方式來設置變數!耶!但是實際的限制使它毫無用處。

你不能在那里傳遞變數。嘗試例如放入MAIL=$HOME/Maildir/它,看看會發生什麼。最好只是停止嘗試將它用於任何目的,唉。因此,如果它是由 shell 處理的,您就不能用它來做您期望能夠做的事情。

使用/etc/profile/etc/bashrc

還有另一個問答給出了為什麼會這樣的原因:

沒有辦法/etc/environment逃避 #(因為它被視為註釋),因為它正在由 PAM 模組“pam_env”解析,並將其視為 KEY=VAL 對的簡單列表並相應地設置環境。它不是 bash/shell,解析器沒有用於進行變數擴展或字元轉義的語言。

參考

引用自:https://unix.stackexchange.com/questions/97736