Fish
為什麼 set -x 在fish的函式中的 eval 中不起作用?
我遇到了一個問題,試圖在fish函式中根據程序的輸出動態設置一些變數。
我將問題縮小到 MWE:
function example eval (echo 'set -x FOO 1;') end
呼叫:
>example >echo $FOO
導致無輸出——即尚未設置 FOO 環境變數。我應該怎麼做?
同樣的事情以更簡單的形式發生:
function trythis set -x foo bar end
如果您現在執行
trythis
andecho $foo
,它也沒有設置。這是因為 fish-x
本身並不會改變變數的範圍,預設情況下它是函式的局部變數,除非它已經全域或普遍存在。嘗試:
eval (echo 'set -gx FOO 1;')
哪裡
g
是全球性的。這使得變數像正常的 POSIXexport
ed 值一樣工作。有趣的是,它的工作方式與eval
plain的工作方式相同set
;如果您g
在命令行上直接使用該行,$FOO
則設置,因此eval
程序替換()
沒有引入新的範圍或子shell,並且當在函式中以這種方式執行時,函式的範圍適用。