変数に関連する変数

変数に関連する変数

次のような効果を得たいのですが、方法がわかりません。

$> A='/dir'
$> B="$A/bin"
$> echo $B
/dir/bin
$> A='/other'
$> echo $B
/other/bin

どんなアイデアがありますか?

ベストアンサー1

Ksh93には、ある変数が別の変数への間接参照になる可能性がある限られた形式があります。

$ A=/dir
$ typeset -n B=A
$ echo $B
/dir
$ A=/other
$ echo $B
/other

一般的なシェルは変数を2回拡張しません。 Bashはkshの間接参照機能と似ていますが、構文が異なります。定義時ではなくアクセス時に間接参照を希望するように指定する必要があります。

$ A=/dir
$ B=A
$ echo ${!B}
/dir
$ A=/other
$ echo ${!B}
/other

通常、変数の値は変数に割り当てられたときにのみ変更されます。訪れるたびに再計算されることを望むなら、コマンド出力の検索

PATHなどの他のプログラムで使用される変数の値を動的に変更したい場合は、LD_LIBRARY_PATHシェルの高度な機能が何であれ、これは不可能です。プログラムが起動すると、その環境変数は起動時に受け取ったのと同じ変数です。シェルで値を変更しても、すでに実行されているプロセスの値には影響しません。

一部のイベントに応じてこれらの変数の値を変更するには、シェルコードを実行するだけです。たとえば、bashにいくつかのコードを実行するように要求できます。プロンプトが表示されるたびにまたは現在のディレクトリが変更されたとき。繰り返しますが、これはすでに実行されているプログラムには影響しません。

おすすめ記事