我正在尝试编写一个脚本,在某些时候需要检查多个文件夹的用户权限。路径存储在一个变量中,每个路径占一行。
到目前为止我有这个:
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'}"