如何为以 $zv 开头的环境变量名称和值创建菜单?

如何为以 $zv 开头的环境变量名称和值创建菜单?

哇!我在这里浏览类似问题已经 2 小时多了!我确定我只想要一个非常简单的东西。

在包含许多函数的 bash 会话中,我们需要访问数十个目录。它们的名称都保存在以 开头的变量中$zv。我们使用变量是因为实际名称很长。

有些很简单,而且容易记住,比如$zvv。但是也会$zvdirection出现类似的东西。关键是可用变量列表$zv...会发生变化。用户永远不知道哪些变量可用。有些将是全新的,自动生成的。

所以她通常会这样做:

cd $zv <tab> <tab>

没什么难的。她得到一个列表,然后手动完成她的cd $zv行。但这些用户需要快速、始终使用这些目录,并且经常使用$zv...隐藏脚本生成的新变量。

所以。我花了 2 个多小时尝试的是一个函数,比如说zv,它将向他们显示所有当前可用的$zv...自动完成功能,然后希望还能在提示符下给他们cd $zv,其中 bash 正在等待他们添加剩余的字符。

我很确定这个功能一定是一行程序,但我被难住了!

答案1

用这个:

arr=()
while read v; do arr+=( "$(printf "%s=%s" "$v" "${!v}")" ); done < <(compgen -v zv)
select i in "${arr[@]}"; do cd "${i#*=}"; break; done

这使用select内置的 bashs 来提供简单的基于菜单的对话框。


  • arr=()初始化数组
  • while ...读取输入并填充数组。
    • arr+=( "..." )向数组中添加新条目。
    • printf "%s=%s" "$v" "${!v}"...打印变量名称及其内容。
  • compgen -v zv生成键入时将完成的所有变量的列表$zv<tab><tab>
  • 此列表用于select生成菜单。
    • cd "${i#*=}"cd将进入第一次出现之后变量中给出的目录中=

相关内容