Ksh
在 Ksh 中使用指令和命名空間別名
我可以為 korn shell 命名空間創建別名嗎?是否有類似 using 指令的
C++
內容(如果符號指定不明確,則將多個命名空間放在一起並引發(編譯器)錯誤)?
儘管 ksh 具有比其他 shell 更高級的功能,但它的核心仍然是一種自動化簡單任務和編寫小腳本的語言,而不是一種用於編寫大型應用程序的語言。您不能期望擁有為大型應用程序設計的典型語言的所有特性,更不用說 C++ 的所有特性了。
我認為您不能為命名空間創建別名。您可以通過列舉其變數(解析 or 的輸出,或者如果要包含從父命名空間繼承的變數,則使用
typeset +p
)並一一複制它們來創建各種命名空間的副本。您可以使用 使變數成為另一個變數的別名,但這僅在命名空間內使用時生效:typeset -p``${!.foo.*}``typeset -n
$ namespace foo { x=1; } $ namespace bar { typeset -n x=.foo.x; echo $x; } 1 $ namespace foo { x=2; } $ namespace bar { echo $x; } 2 $ echo ${.bar.x} .foo.x
Ksh 允許您在讀取、修改或取消設置變數時使用規則函式走得更遠並執行任意程式碼。例如,如果您定義一個名為 的
x.get
函式,則每次x
檢索 的值時都會呼叫此函式。namespace bar { x.get () { _=${.foo.x}; } x.set () { .foo.x=${.sh.value}; } x.append () { .foo.x+=${.sh.value}; } x.unset () { unset ${.sh.name}; } }
我認為您必須為每個變數定義這些,並且您無法檢測到添加到 namespace 的變數
foo
。這可以擴展為查找多個命名空間。
x.get () { if ((${.foo.x+1}+${.bar.x+1}!=1)); then echo 1>&2 "Ambiguous variable x, available in more than one of foo and bar" exit 125 fi _=${.foo.x-${.bar.x}} }