私の言葉は、env
次の形式のGNUまたはBSDコマンドを使用していることです。env
env [name=value ...] [utility [args ...]]
特殊文字を部分的にエスケープする方法はないようですが、その部分を解析するvalue
方法がわかりません。env
value
env
シェルの機能を使ってこれを行う方法はいくつかありますが、シェルの助けを借りずにリテラル文字列を渡したいと思います(execute byと似ていますexec
)。つまり、コマンドでサポートされている改行文字を含むいくつかの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
ベストアンサー1
あなたの理解が間違っています。"hello\nworld"
変数に何かを保存すると、\n
文字通り解釈されます。printf
または、フラグecho
などのツールを呼び出す場合にのみ-e
コンソールに印刷するときに、これらのバックスラッシュシーケンスを展開します。
あなたの場合、変数を環境に渡して改行を拡張したい場合は、次を使用することをお勧めします。ANSI Cスタイル$'...'
参照演算子ksh93 バージョンは、bash や zsh を含むいくつかの異なるシェルでサポートされるようになりました。
env FOO=$'hello\nworld' ruby -e 'puts ENV["FOO"]'
あるいは、移植性が問題の場合、簡単な解決策は目的の場所に改行文字を配置することです。
f="hello
world"
env FOO="$f" ruby -e 'puts ENV["FOO"]'