zsh
Unicode文字を含む変数名はサポートされていますが(multibyte
このオプションが設定されている場合)printenv
(最小GNUバージョン8.23)では、これらの変数名を処理できないようです。
例えば、
% export BANANAS=バナナス
% export バナナス=BANANAS
% /bin/echo -e "$BANANAS\n$バナナス"
バナナス
BANANAS
...しかし1
% printenv | grep BANANAS
BANANAS=バナナス
ャ\203\260ャ\203\252ャ\203\252ス=BANANAS
% printenv --version | head -1
printenv (GNU coreutils) 8.23
変数名でUnicodeを処理できるprintenvに代わるものはありますか? (移植性の理由から、「all-zsh」ソリューションがより優れています。)
1完全公開:画面出力をprintenv | grep BANANAS
StackExchangeエディタに貼り付けると、一部の文字が自動的に削除されました。私は、8進数のコード(たとえば、\203\260
など)を指定する文字列を使用して、これらの削除された文字を「シミュレート」しました。結果は画面の実際の出力に非常に似ています。
答え1
もちろんexport
(Bourneスタイルのシェルで動作)またはtypeset -x
他のバリエーションを使用してください。特定の変数を印刷するには、を使用できますtypeset -p VAR1 VAR2 VAR3
。
zshから読み取ることができる参照形式の値を印刷します。VARIABLE=VALUE
値に特殊文字のみを含めるには、次のように関数を作成できます。
zprintenv () {
local __zprintenv_var
if [[ $# -eq 0 ]]; then set -- $(typeset +mx); fi
for __zprintenv_var do
print $__zprintenv_var=${(P)__zprintenv_var}
done
}
答え2
POSIXではないのでないかもしれません。
追加資料:
もちろんzsh
実装も可能です拡大するしかし、他のアプリケーションがこれらの変数を読み取れない場合、使用は制限されます。
シェル変数と環境変数は、シェル変数はシェルインタプリタのメモリに格納できますが(シェルインタプリタ自体によってのみ制限されます)、環境変数はエクスポートされて他のプログラムで使用できる点で異なります。これが標準(POSIXなど)が適用される理由です。