[英]Looping through an Array in bash
我当前正在尝试创建一个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
当您的用户名带有空格时,从ls
输出ls
数组将导致严重的问题。 请改用全局表达式。 同样,使用[ -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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.