「env」コマンドで改行で値を設定するには?

「env」コマンドで改行で値を設定するには?

私の言葉は、env次の形式のGNUまたはBSDコマンドを使用していることです。env

env [name=value ...] [utility [args ...]]

特殊文字を部分的にエスケープする方法はないようですが、その部分を解析するvalue方法がわかりません。envvalue

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"]'

おすすめ記事