Shell如何通過
如何通過env
命令使用換行符設置值?
我的意思是使用以下形式的 GNU
env
或 BSDenv
命令:env [name=value ...] [utility [args ...]]
看起來沒有辦法
value
部分轉義特殊字元,但我不太確定如何env
實現解析value
部分。我知道通過 shell 的功能有很多方法可以做到這一點,但我想在沒有 shell 幫助的情況下傳遞文字字元串(有點像 execute
env
byexec
)。也就是說,我需要找到某種帶有換行符並由env
命令支持的文字字元串格式。例如:env FOO=LITERAL_STRING ruby -e 'puts ENV["FOO"]'
這裡
LITERAL_STRING
應該包含一個帶有換行符的文字字元串,並且env
應該理解這種格式。使用上面的命令,預期的輸出應該是:
hello world
我想知道這是否可能。我會很感激你的幫助。
環境
env
我使用 BSD
env
,所以它無法列印版本。不知道man
能不能幫上忙:$ man env | tail -n1 BSD April 17, 2008 BSD
- 你
$ sw_vers ProductName: macOS ProductVersion: 11.6 BuildVersion: 20G165
你的理解是不正確的。當您將內容儲存
"hello\nworld"
到變數中時,\n
將按字面意思解釋。僅當您呼叫printf
或echo
使用-e
標誌之類的工具時,它們才會在列印到控制台時擴展這些反斜杠序列。在您的情況下,您希望將變數傳遞給擴展換行符的環境,建議為此在 bash 中使用ANSI C 樣式引用
env FOO=$'hello\nworld' ruby -e 'puts ENV["FOO"]'
或者,如果可移植性是一個問題,一個簡單的解決方案是將這些換行符放在您想要的位置
f="hello world" env FOO="$f" ruby -e 'puts ENV["FOO"]'