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'}"

관련 정보