環境変数の値にドル記号を含めるのは悪い習慣ですか?
例:
MY_VAR="$toto"
より正確には、Javaプログラムからアクセスできるように/etc/environment
ファイルに設定したいと思います。私はテストを行い、それは機能していますが、壊滅的な副作用に遭遇しないことを確認したいだけです。変数の値はパスワードであり、ドル記号で始まるため、選択の余地はありません。
/etc/environment
の特定のケースでは、いいえ、変数値の$
は特別な意味を持ちません。 /etc/environment
は pam_env
という名前のPAMモジュールによって読み取られるファイルであり、pam_env
には$
を解釈するための特定の構文があります。
/etc/environment
では、解釈されません。/etc/security/pam_env.conf
および~/.pam_environment
(ユーザー固有のファイル)では、pam_env
は、次の構文の行を検出すると$
を特別に扱います。
FOO DEFAULT=SOMETHING${BAR}SOMETHINGELSE$BAR
FOO OVERRIDE=SOMETHING${BAR}SOMETHINGELSE$BAR
この場合、${BAR}
は変数BAR
の値に置き換えられますが、$BAR
は置き換えられません。
どちらの場合でも、次のような行に対して:
FOO=BAR$BAR${BAR}
変数FOO
の内容は、リテラル文字列BAR$BAR${BAR}
になります。
pam_env.conf
マンページには例があります。
Silly examples of escaped variables, just to show how they work.
DOLLAR DEFAULT=\$
DOLLARDOLLAR DEFAULT= OVERRIDE=\$${DOLLAR}
DOLLARPLUS DEFAULT=\${REMOTEHOST}${REMOTEHOST}
ATSIGN DEFAULT="" OVERRIDE=\@
あなたの例はあなたの質問を説明していません。
$ toto="somevalue"
$ MY_VAR="$toto"
$ echo $MY_VAR
somevalue
$
あなたが尋ねたことを行うには、次のものが必要です。
MY_VAR='$toto'
または
MY_VAR="\$toto"
それが悪い習慣であるかどうか確かに言えません。個人的には、明らかな問題は見当たりません。
正確な質問に答えるには:
はい、環境変数の値にドル記号を含めることは悪い習慣です。ただし、これは実際に表示したコードスニペットではありません。
MY_VAR="$toto"
$
はシェルの特殊文字(bash
またはdash
)であり、変数の展開に対して保護されていない限り、実際にMY_VAR
の値にリテラルのドル記号を入れることはありません。
そのためには、$
をエスケープする必要があります。直前にバックスラッシュを付けるか、または単一引用符で囲みます。