~ ? export TEST_KEY='hello\nworld' && iex
iex(1)> System.get_env("TEST_KEY")
"hello\\nworld"
當System.get_env/1在字串上運行時\n會插入一個額外的反斜杠,有什么辦法可以防止這種行為?
uj5u.com熱心網友回復:
它不插入任何內容,它公平地讀取環境變數,并且因為反斜杠要在雙引號中轉義,所以會如您所見地列印出來。
你認為的“換行”不過是轉義序列。這是例如echoman的摘錄:
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes
原始 shell 中的默認行為:
? echo -E 'hello\nworld'
hello\nworld
事實上,你會在echo默認情況下看到一個新行,或者解釋器的任何副作用,無論這個解釋器是誰。該值本身包含一個反斜杠和nASCII 符號,除此之外沒有任何魔法。
也就是說,如果想要在值中使用新行代替\n序列,則必須應用轉義本身。
"TEST_KEY"
|> System.get_env()
|> to_string() # to NOT raise on absent value, redundant
|> String.replace("\\n", "\n")
uj5u.com熱心網友回復:
這確實是一個殼問題,而不是靈丹妙藥問題。請參閱此相關答案,其中顯示了如何在 bash 中的環境變數中設定新行。從 elixir 使用它:
$ TEST_KEY=$'hello\nworld' elixir -e 'IO.puts(System.get_env("TEST_KEY"))'
hello
world
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362585.html
上一篇:在shell中逐行合并兩個檔案
