如何在别名或函数中使用全局变量数组

如何在别名或函数中使用全局变量数组

我正在尝试简化重复性的工作程序。为此,我尝试编写一个 .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"

如何配置函数来检查数组中的值然后使用它的变量?

答案1

当你写:

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

然后您可以使用例如访问这些值${theme[x1]}。您的别名可以采用以下形式:

alias thm="cd /var/www/\${site[\$CURRENT]}/sites/all/themes/\${themes[\$CURRENT]}"

然后你的sroot函数就会设置CURRENT为你想要的键。该别名始终会将您带到当前站点内的正确目录。

还有其他方法来具体定义数组,但这将为您提供总体思路。

相关内容