
어느 시점에서 여러 폴더의 사용자 권한을 확인해야 하는 스크립트를 작성하려고 합니다. 경로는 변수에 저장되며 각 경로는 새 줄에 저장됩니다.
지금까지 나는 이것을 가지고 있습니다 :
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'}"