zsh: パラメーター拡張のための sh/ksh エミュレーションの終了

zsh: パラメーター拡張のための sh/ksh エミュレーションの終了

図書館コードがあります。可能zsh(set)で実行されますが、ZSH_VERSION呼び出し元のzsh 可能sh/kshエミュレーションモードで。 zshパラメータ拡張(例:すべての変数のリスト)が必要なので、次のように試しましたemulate zsh -c ...

export code='print -rl -- ${(k)parameters}'
zsh --emulate  sh -c 'emulate zsh -c "$code"'  # nothing
zsh --emulate ksh -c 'emulate zsh -c "$code"'  # nothing
zsh --emulate zsh -c 'emulate zsh -c "$code"'  # useless, but works
# emulate -[LR] zsh make no difference

shでは…一度エミュレーションに入るとksh今は出られないというのですか?

ベストアンサー1

(k)shシミュレーションを終了できます。emulate組み込みコマンドは、いくつかのオプションを設定します。これは、長いzshバージョン固有のsetoptコマンドのショートカットと目的の範囲を取得するためのいくつかの設定です。

このオプションで--emulatezshを起動すると、いくつかのオプションを設定する以上の作業が行われます。これ手動残念ながら、これはあいまいです。

シェルのエミュレートコマンドと比較してシームレスなエミュレーションを保証するには、このオプションを使用するときに特定の追加手順を実行する必要があります。たとえば、POSIXの使用と競合する変数(パスなど)は、シェルで定義されていません。

--emulate shロード中に--emulate ksh発生していない、またはロード中のいずれか基準寸法例えばzsh/parameter提供されるものです$parameters。必要に応じて、zshがエミュレーションモードで起動されても明示的にロードする必要があります。比較:

$ zsh --emulate sh -c 'emulate zsh -c "echo \${(k)modules}"'
$ zsh --emulate sh -c 'zmodload zsh/parameter; emulate zsh -c "echo \${(k)modules}"'
zsh/parameter zsh/main zsh/rlimits

だから:

$ export code='zmodload zsh/parameter; print -rl -- ${(k)parameters}'
$ zsh --emulate  sh -c 'emulate zsh -c "$code"'
galiases
EGID

おすすめ記事