1
在Perl,%ENV
可以訪問環境:如何確定環境條目是否是bash函數?
e='() { echo This is not a func
}'
d() { echo This is a func
}
export e
export -f d
perl -e 'print $ENV{"d"},"\n",$ENV{"e"},"\n"'
但我還沒有找到一種方法來告訴d或Ë是一個bash的功能。我如何從Perl中做到這一點?
上面的命令給出'function'。但'e'不是一個函數。 –
對於外殼,它是。一旦函數體被序列化到環境中,它就變成了一個單純的字符串,與普通字符串無法區分。實際上,'perl -e'print qx(bash -c「e」)''會運行並回顯'這不是func'。你發現了一個邊緣案例,啓發式不符合你的期望,處理它。 – daxim
進一步分析,似乎邊緣情況是,如果變量以'(){'開頭,那麼它被視爲一個函數 - 無論它是否爲函數(例如結尾)可能會丟失)。這意味着我可以簡單地查找'(){'作爲前4個字符;不需要產生一個殼。 –