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

相關內容