シェルの変数名に(-ハイフン)を使用するには?

シェルの変数名に(-ハイフン)を使用するには?

変数に(ハイフン - )を使用しようとしていますが、test-ing=3.0値を印刷できません$test-ing。シェルではハイフンが機能しないことを知っています。変数名を変更せずに変数値を印刷する方法はありますか?

答え1

環境変数がtest-ing有効なシェル変数名ではないと仮定すると、次のようになりますprintenv

% env foo-bar=baz printenv foo-bar
baz

またはパール:

% env foo-bar=baz perl -e 'print $ENV{"foo-bar"}'
baz

あるいは、Pythonなどの他のツールもあります。

答え2

内部にrcシェルあるいは、派生語(esakanga)など、ほとんどすべてを変数名に使用できます。

すべての変数も環境にエクスポートされます。

しかし、Byron RakitzisのrcUnixクローン(from es/ akangaderived from)ではポートplan9 rc(plan9がFLOSSとしてリリースされた後に公開されています)下線以外の2つ以上の文字またはシーケンスが含まれている場合は、a-zA-Z0-9_環境からエクスポートまたはインポートするときにエンコード/デコードを使用してください。

$ rc
; foo-bar = baz
; echo $'foo-bar'
baz
; printenv foo-bar
; env | grep foo
foo__2dbar=baz

Byronでは、rc名前が空の変数は使用できません。

; '' = 1
rc: zero-length variable name

1 = fooまたは、* = (foo bar)同じことが機能しますが、変数ではなく位置パラメータを設定します。

関連情報