Shell Проверка привилегий пользователя для многострочной переменной

Shell Проверка привилегий пользователя для многострочной переменной

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

Пока у меня вот что:

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

Заменять:

    for i in "$arr"

с:

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

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

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

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

Связанный контент