1

Я пытаюсь написать сценарий, который в какой-то момент должен проверить пользовательские привилегии нескольких папок. Пути хранятся в переменной, каждый путь в новой строке.

Пока у меня есть это:

output=$PATH
output=$(echo "$output" | tr ':' '\n' | sort )                                                                                                                                                         
arr=($(echo "$output"))                                                                                                                                                                                                           
for i in "$arr"                                                                                                                                                                                                                   
do                                                                                                                                                                                                                                
    echo "$i"                                                                                                                                                                                                                     
    if ! [[ -x $i ]]; then                                                                                                                                                                                                        
        echo "You are missing execute Permission on
        echo "$i"                                                                                                                                                                                  
    fi                                                                                                                                                                                                                            
done 

Вывод содержит несколько путей, в моем случае содержимое моей $PATH .

В первой строке я пытаюсь преобразовать многострочную переменную в массив, а затем перебрать все элементы массива.

Когда я запускаю код, он работает только для первой записи, echo "$i" отображает только /bin перед выходом из цикла.

Так что, я думаю, я не преобразовал многострочную переменную в массив.

1 ответ1

1

Заменить:

    for i in "$arr"

с:

    for i in "${arr[@]}"

$arr ссылается только на первый элемент массива. {$arr[@]} будет расширен до всех элементов, каждый в отдельном слове.

Также, если у вас bash 4.0 или новее, следующее может создать arr за один шаг:

mapfile -t arr <<<"${PATH//:/$'\n'}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .