2016-06-03 2 views
0

Я пытаюсь написать функцию bash, которая будет перечислять каждый подкаталог и файл в текущем каталоге и индексировать их в массиве, затем он будет cd в нужный каталог, обратившись к этому индексу в массиве. Когда я повторяю массив в индексе 8, он выводит 0 [8]. почему он не выводит имя каталога?Использование индексированных элементов массива для выбора каталогов в bash

num=0 

for dir in ./* 
do 
    echo -n $num 
    echo -n ": " 
    echo $(basename $dir ) 
    num=$(($num+1)); 
done 

declare -a array=($(for i in {0..$num}; do echo 0; done)) 

for dir in ./* 
do 
    for i in {0..$num}; 
    do 
    if [ -z $array[$num] ]; then 
     $dir= basename $dir 
     $array[$num]= $num 
    fi 
    break 

    done 
done 

echo "Enter the directory number: " 
read requested 

cd "$array[$requested]" 
+0

'{0 .. $ num}' не работает в b зола, поскольку скобки будут расширены до параметров. – andlrc

ответ

1

вы можете инициализировать массив и добавить элементы нравится этот

ARRAY=() 
ARRAY+=('foo') 
ARRAY+=('bar') 

, чтобы получить значение, которое вы должны использовать фигурные скобки

echo ${ARRAY[0]} 

так должно работать

#!/bin/bash 

num=0 
for dir in ./* 
do 
    echo $num": " $dir 
    num=$(($num+1)); 
done 

ARRAY=() 
for dir in ./* 
do 
    ARRAY+=("$dir") 
done 


echo "Enter the directory number: " 
read requested 

echo "you entered " $requested 
echo "go to" ${ARRAY[$requested]} 

cd "${ARRAY[$requested]}" 
pwd 
Смежные вопросы