Bash
如何在別名或函式中使用全域變數數組
我試圖簡化重複的工作程序。為此,我正在嘗試編寫一個 .bashrc 腳本,該腳本將設置別名可以引用的全域路徑變數。免責聲明:我是 linux 和一般腳本的新手,所以我不知道我採取的方法是否正確。
這是我到目前為止所寫的。
SET_DIR=/var/www/ #Set the current site's root directory function sroot (){ SET_DIR=/var/www/$1 setaliases echo $SET_DIR } #Reinitialize aliases with new sroot function setaliases(){ alias chk="echo $SET_DIR" alias rt="cd $SET_DIR" alias thm="cd $SET_DIR/sites/all/themes/" alias mod="cd $SET_DIR/sites/all/modules" } setaliases
我想做的是擴展這個想法以在數組或文件中定義站點。然後使用一個函式來檢查傳遞給 sroot 函式的值。這將反過來在其他函式中設置變數。
#myfile or array site=example1.com theme=alpha shortcut=x1 site=example2.com theme=beta shortcut=x2
因此,例如“sroot x1”會影響
SET_DIR=/var/www/$site # and alias thm="cd $SET_DIR/sites/all/themes/$theme"
如何配置函式以檢查數組中的值然後使用它的變數?
當你寫:
alias thm="cd $SET_DIR/sites/all/themes/"
SET_DIR
您在定義別名時正在擴展 的值。這意味著每次執行別名時都會獲得相同的值,即使您在兩者之間更改了變數值。如果您使用反斜杠轉義,$
那麼當您使用別名時,該變數將被取消引用:$ foo=hello $ alias test="echo \$foo" $ test hello $ foo=world $ test world
因此,如果您以這種方式定義別名,那麼當您更改
SET_DIR
. 您還可以單引號引用別名定義。對於您的數據文件,Bash 4 及更高版本支持關聯數組,它可以讓您像這樣定義數據:
declare -A theme site # This makes these variables associative arrays add_site() { local shortcut=$1 theme[$shortcut]=$2 site[$shortcut]=$3 } add_site x1 example1.com alpha add_site x2 example2.com beta
然後,您可以使用 eg 訪問這些值
${theme[x1]}
。然後,您的別名可以採用以下形式:alias thm="cd /var/www/\${site[\$CURRENT]}/sites/all/themes/\${themes[\$CURRENT]}"
然後,您的
sroot
功能將設置CURRENT
為您想要的鍵。別名將始終將您帶到目前站點中的正確目錄。還有其他方法可以特別定義數組,但這將為您提供總體構想。