比方說,我有一堆年初設定的常量,我按字母順序排列爲更好地瞭解一個腳本:bash的變量向前聲明
declare -r home_folder=/home/
declare -r user_folder=$home_folder$user_name/
declare -r user_name=$USER
顯然,第二行的評價不會給因爲bash只進行一次評估,因此稍後調用$user_folder
仍然會給出/home/
。有什麼辦法可以解決這個問題嗎?
編輯:首選的解決方案看起來像
declare -r home_folder=/home/
declare -r user_folder=$home_folder$pointer-to-user_name/
declare -r user_name=$USER
與時user_folder
評估被評估的指針,但我不知道是否有可能這在bash。
ALPHABETICALLY ????如何在語義上對它們進行排序,那麼可能你的問題本身就會消失。 (按字母順序... *不相信的搖頭*)請不要感到難過。我的建議:嘗試按照它們「出現」的順序排列,然後這個問題就消失了。按字母順序排列沒有足夠的優勢(如果你問我)沒有足夠的優勢來證明這一點。 – Alfe
Shell腳本是表達行爲的迭代方式,執行順序不是基於依賴關係的。你想要達到的目標要麼是讀完所有可能的任務,要麼只執行滿足依賴關係的任務,直到完成所有任務或剩下的所有任務都有未滿足的依賴關係,或者構建某種依賴關係樹並遵循它。你可以構建它,或者更可能的是,根據它們的語義來決定順序賦值是否合理,並有助於避免循環依賴,尤其是使用'set -u'時。 – Fred
除了命令的名稱之外,shell中沒有實際的變量聲明。 'declare -r user_name'只設置*名稱*上的一個屬性;除非實際爲其分配值,否則'user_name'仍未定義。 (OK,'-r'就是一個不好的例子,因爲未能分配給一個你認爲只讀的名字會有效地阻止你通過這個名字定義一個變量。) – chepner