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

相关内容