/etc/environment からエスケープされたポンド記号 (#)

/etc/environment からエスケープされたポンド記号 (#)

env変数を追加しましたが、/etc/environment変数の値に#記号が含まれているため、文字列が削除されました。

MYSQL_PWD="something#no"

env上記のコードを実行するとハッシュが生成されますMYSQL_PWD=something。どうすればエスケープできますか?\キャラクターを試してみました。

答え1

/etc/environmentこれは、シェル独立変数の公開位置では不可能に見えます。これを考慮すると、ハッシュタグ()を含む文字列をサポートしていないようで、#これをエスケープする方法もないようです。

次のタイトルのSF Q&Aを見つけました。Linuxなど/環境で先行する「#」文字を正しくエスケープする方法は?。次のいずれの方法も機能しません。

  • コントロール=「こんにちは」
  • テスト0 = "#hello"
  • test1="h\#こんにちは"
  • test2 = "こんにちは"
  • test3 = "h //#ello"
  • test4 = "h/#ello"
  • test5=h#こんにちは
  • test6=h\#こんにちは
  • test7=h#こんにちは
  • test8=h //#こんにちは
  • test9=h/#ello
  • test10='h#こんにちは'
  • test11='h\#こんにちは'
  • test12='h#こんにちは'
  • test13='h//#こんにちは'
  • test14='h/#ello'

この質問に対する答えと私の提案は次のとおりです。

まあ、あなたが望むものは/etc/environmentシェル構文ではありません。これは難しいことです。シェル構文はシェル構文と同じですが、それは本当に残念です。その背後に隠れたアイデアは/etc/environment素晴らしいです。変数を設定するシェルは独立した方法です!うん!しかし、実際の限界により役に立たなくなります。

そこに変数を渡すことはできません。それを入れて、MAIL=$HOME/Maildir/何が起こるのか見てください。ああ、何らかの目的で使用しようとする試みをやめるのが最善です。そのため、シェルで処理するときに期待した操作を実行することはできません。

/etc/profileまたはを使用してください/etc/bashrc

しかし、まだ別のQ&Aその理由は次のとおりです。

/etc/environment#はKEY = VALペアの簡単なリストとして扱い、それに応じて環境を設定するPAMモジュール "pam_env"によって解析されているため(コメントとして扱われるため)エスケープできません。 bash / shellではなく、パーサーには変数拡張や文字エスケープを実行するための言語はありません。

引用する

答え2

二重引用符の中の一重引用符が私にとって効果的でした。誰かに役立つかもしれません

test="'h/#ello'"

答え3

NodeJSでテストするとき(特にExpressアプリケーションでは)予約文字が含まれている場合は、変数全体を引用符で囲むことができます。

EXAMPLE_VAR = he#llo
FIXED_EXAMPLE_VAR = "he#llo"

それから変数を試してみてください。

console.log(process.env.EXAMPLE_VAR); // outputs `he`
console.log(process.env.FIXED_EXAMPLE_VAR); // outputs `he#llo`

答え4

#使用。 。 。交換%23

たとえば、

postgres://user:#password#@server:port/database

到着する:

DB_URI="postgres://user:%23password%23@server:port/database"

関連情報