zsh:「ローカルエクスポート」を実装できますか?

zsh:「ローカルエクスポート」を実装できますか?

local exportzshで実装できますか?おそらくtryとAlwaysを使用できますか?

これにより競合状態が発生しますか?

「ローカルエクスポート」とは、サブプロセス(範囲内)からアクセスできるローカル変数とまったく同じことを意味します。

例:

function a() {
 local export YACY_TIMEOUT=60
 yacy -r -d sth
 }
 export YACY_TIMEOUT=4
 echo "$YACY_TIMEOUT" # 4
 a
 echo "$YACY_TIMEOUT" # 4

ベストアンサー1

変数は子プロセスで常に使用できます。存在する:

a=1
(echo "$a")

1が見えます。

あなたが意味するのは、変数がローカルスコープを持ち、環境にエクスポートして渡すことができるようにしたいということです。環境変数としてコマンドは処刑された。コマンドを実行するとプロセスのメモリが消去され(環境はプロセスの一部のデータを保持する方法です)、サブプロセスをフォークするとメモリ全体がコピーされ、すべてが保持されます。

これを行うには、次のものを使用できますlocal -x

a=(1 2)
f() {
  local -x a=3
  typeset -p a
  printenv a # printenv being *executed*
}
f
typeset -p a

以下を提供します。

typeset -x a=3
3
typeset -a a=( 1 2 )

または、export宣言後にこれを実行できますlocal

a=(1 2)
f() {
  local a=3
  export a
  typeset -p a
  printenv a # printenv being *executed*
}
f
typeset -p a

変数をシェル変数として定義することなく、単一のコマンド環境で変数を渡すことができます。

a=(1 2)
f() {
  a=3 printenv a # printenv being *executed*
}
f
typeset -p a

localAlmquistシェルは1980年代後半に始まりましたが、異なる動作をしますzsh。 Almquistシェル(およびNetBSD / FreeBSDのダッシュやshなどの子)では、local変数の範囲のみが影響を受け、変数の値や属性は変更されません。

zshは、外部スコープの変数とは無関係にまったく新しい変数を宣言するという点で、localksh93と同様に機能します。typeset

ksh88、bash、およびpdkshlocaltypesetこれを試みますが、まだ次のような外部スコープの変数からいくつかのプロパティを継承します。出口属性。これはksh93で変更されましたが、ksh93も静的スコープに切り替え、その構文をfunction f { ...; }使用して宣言された関数内でのみローカルスコープを実装しました。

おすすめ記事