在bash中循环遍历数组

sar*_*ean 2 arrays macos bash loops if-statement

我目前正在尝试创建一个bash脚本,它将检查每个users/Library/Mail文件夹的内部,以查看是否存在名为V2的文件夹.该脚本应创建一个数组,其中数组中的每个项目都是用户,然后遍历每个用户,检查其主文件夹中是否有上述标题内容.这是我到目前为止:

#!/bin/bash

cd /Users

array=($(ls))

for i in ${array[@]}
do

if [ -d /$i/Library/Mail/V2 ]

then
    echo "$i mail has been upgraded."
else 
    echo "$i FAIL"

fi

done
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 5

ls当您拥有带空格的用户名时,从输出中填充数组将导致严重问题.请改用glob表达式.此外,使用[ -d $i/... ]将类似地使用空格中断名称 - 使用[[ -d $i/... ]]([[ ]]构造具有自己的语法规则并且不需要引用)或[ -d "$i/..." ](使用引号).

类似地,您需要使用双引号"${array[@]}"来避免使用两个空格拆分名称进行字符串拆分,如下所示:

cd /Users
array=(*)
for i in "${array[@]}"; do
  if [[ -d $i/Library/Mail/V2 ]]; then
    echo "$i mail has been upgraded."
  else 
    echo "$i FAIL"
  fi
done
Run Code Online (Sandbox Code Playgroud)

也就是说,你根本不需要一个阵列:

for i in *; do
  ...check for $i/Library/Mail/V2...
done
Run Code Online (Sandbox Code Playgroud)