
Я пытаюсь написать скрипт, который в какой-то момент должен проверить привилегии пользователя нескольких папок. Пути хранятся в переменной, каждый путь в новой строке.
Пока у меня вот что:
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'}"