
我正在嘗試編寫一個腳本,在某些時候需要檢查多個資料夾的使用者權限。路徑儲存在變數中,每個路徑佔一個新行。
到目前為止我有這個:
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'}"