2
比方說,我有存在的變量在Bash的環境:如何確定Bash變量或函數是否已被再次定義*?
variable1="zappo"
現在,讓我們說,我定義的變量再次,具有完全相同的值:
variable1="zappo"
通過什麼方式能我在shell腳本中確定第二個定義已經發生?我關心的是如何在Bash變量定義將更改環境中的變量,而不是它如何更改環境中的變量確實如此。
如果你想考慮一個實現,想象一個腳本來源來設置一個變量的環境。想象一下,這個腳本以前是從哪裏來的,而且它定義的一些變量已經改變了。我需要腳本的第二個源代碼來列出它已定義的變量,儘管事實上這些變量中的一些可能已經存在相同的值。
概括這個概念,你能想象一種列舉重新來源的函數的方法嗎?假設有一個由函數庫組成的腳本。該腳本最初是源代碼,然後庫腳本中的一個功能發生了更改,因此需要重新編制庫腳本。即使許多重新定義的函數與以前定義的函數沒有區別,這樣的庫腳本如何列出它重新定義的函數呢?
下面是一些代碼,可以提供一些靈感的功能列表:
#!/bin/bash
initialListOfFunctionsInEnvironment="$(typeset -F | awk -F"declare -f " '{print $2}')"
function1(){
variable1="zappo"
}
function2(){
variable1="zappo"
}
finalListOfFunctionsInEnvironment="$(typeset -F | awk -F"declare -f " '{print $2}')"
functionList="$(diff <(echo "${initialListOfFunctionsInEnvironment}") <(echo "${finalListOfFunctionsInEnvironment}") | grep -E '^(<|>)' | awk -F"> " '{print $2}')"
echo -e "\nlist of functions loaded:"
echo "${functionList}"