为回显文本行运行以下返回值,但实际只触及数组中的第一个应用程序:
#!/bin/sh
path=/Applications
app[0]="Microsoft Communicator.app"
app[1]="Microsoft Lync.app"
app[2]="Microsoft Messenger.app"
app[3]="Remote Desktop Connection"
IFS=""
for i in ${app[*]}
do
if [[ -a $path/$app ]];
then
chflags hidden $path/$app;
echo "Hiding $app"
fi;
done
exit
答案 0 :(得分:2)
除了Artur R. Czechowski指出的基本问题之外,你真的应该引用所有变量引用(并使用[@]
而不是[*]
)。这是使用空格处理变量的正确方法;设置IFS会有一些工作,但可以破坏其他东西。此外,bash中的行末尾不需要分号。这是我建议的重写:
for i in "${app[@]}"
do
if [[ -a "$path/$i" ]] # Double-quotes not strictly needed here, but I consider it a good habit
then
chflags hidden "$path/$i"
echo "Hiding $i"
fi
done
答案 1 :(得分:1)
在循环中使用$ i而不是$ app,如下所示:
for i in ${app[*]}
do
if [[ -a $path/$i ]];
then
chflags hidden $path/$i;
echo "Hiding $i"
fi;
done