2

我目前正在尝试创建一个 bash 脚本,该脚本将检查每个用户 /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
4

1 回答 1

5

ls当您的用户名带有空格时,从 的输出中填充您的数组将导致严重的问题。请改用 glob 表达式。此外, using[ -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

也就是说,你根本不需要一个数组:

for i in *; do
  ...check for $i/Library/Mail/V2...
done
于 2012-05-16T20:25:33.577 回答