Use isto:
arr=()
while read v; do arr+=( "$(printf "%s=%s" "$v" "${!v}")" ); done < <(compgen -v zv)
select i in "${arr[@]}"; do cd "${i#*=}"; break; done
Isso usa o bashs select
builtin para fornecer diálogos simples baseados em menu.
-
arr=()
inicializa a matriz -
while ...
lê a entrada e preenche a matriz.-
arr+=( "..." )
adiciona novas entradas ao array. -
printf "%s=%s" "$v" "${!v}"
... imprime o nome da variável e seu conteúdo.
-
-
compgen -v zv
gera a lista de todas as variáveis que seriam preenchidas ao digitar$zv<tab><tab>
. - Esta lista é dada para
select
para gerar o menu.-
cd "${i#*=}"
thiscd
s no diretório fornecido na variável após o primeiro=
.
-