我想重構一些冗長的shell腳本,並且想要消除在函數中聲明但全局使用的任何變量。有沒有辦法快速找到這些變量?確定全局使用哪些變量
另外,有沒有辦法快速找出哪些變量是空的使用?這樣,我可以在函數中排版所有變量,並快速查看所有這些全局使用變量的列表(有一些誤報,但我可以通過這些列表)。
謝謝。
我想重構一些冗長的shell腳本,並且想要消除在函數中聲明但全局使用的任何變量。有沒有辦法快速找到這些變量?確定全局使用哪些變量
另外,有沒有辦法快速找出哪些變量是空的使用?這樣,我可以在函數中排版所有變量,並快速查看所有這些全局使用變量的列表(有一些誤報,但我可以通過這些列表)。
謝謝。
您可能會感興趣set -u
對您有幫助。如果一個變量在使用時未被設置,那麼shell將會出錯。這不會幫助您找到使用時爲空字符串的變量,但會找到未設置的變量。
這很好,謝謝。我試過使用ksh -R來運行腳本,但它似乎沒有像常規運行時那樣觀察set -u。你知道有一種方法可以在不實際執行腳本的情況下設置-u強加的錯誤嗎?再次感謝。 – noisesolo
我不知道這裏有任何真正的快捷方式,但肯定有一些步驟可以更系統地探索您的腳本。
export -p
查找導出的變量。declare
關鍵字的Grep。declare -F
和grep聲明語句或變量賦值。set
的輸出以排除您所瞭解的變量和函數,然後調查其餘部分。這些都不是全面的解決方案,恐怕。但爲了讓你開始:
# Find declare statements in functions.
for func in $(declare -F | awk '{print $NF}'); do
type "$func" | fgrep declare
done
希望幫助!
對於ksh,看看'-R'命令行選項'ksh -R outfile script' – cdarke