local export
zshで実装できますか?おそらく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
local
Almquistシェルは1980年代後半に始まりましたが、異なる動作をしますzsh
。 Almquistシェル(およびNetBSD / FreeBSDのダッシュやshなどの子)では、local
変数の範囲のみが影響を受け、変数の値や属性は変更されません。
zshは、外部スコープの変数とは無関係にまったく新しい変数を宣言するという点で、local
ksh93と同様に機能します。typeset
ksh88、bash、およびpdkshlocal
もtypeset
これを試みますが、まだ次のような外部スコープの変数からいくつかのプロパティを継承します。出口属性。これはksh93で変更されましたが、ksh93も静的スコープに切り替え、その構文をfunction f { ...; }
使用して宣言された関数内でのみローカルスコープを実装しました。